关于javascript:jQuery属性选择器:如何使用自定义名称空间查询属性

关于javascript:jQuery属性选择器:如何使用自定义名称空间查询属性

jQuery attribute selectors: How to query for an attribute with a custom namespace

假设我有一个简单的XHTML文档,该文档使用自定义名称空间作为属性:

1
2
3
4
5
<html xmlns="..." xmlns:custom="http://www.example.com/ns">
    ...
   
    ...
</html>

如何使用jQuery匹配具有特定自定义属性的每个元素?使用

1
$("div[custom:attr]")

不起作用。 (到目前为止,仅尝试使用Firefox。)


jQuery不直接支持自定义名称空间,但是您可以使用过滤器功能找到要查找的div。

1
2
3
4
5
// find all divs that have custom:attr
$('div').filter(function() { return $(this).attr('custom:attr'); }).each(function() {
  // matched a div with custom::attr
  $(this).html('I was found.');
});

在某些情况下可以使用:

$("div[custom\\\\:attr]")

但是,有关更高级的方法,请参见此XML命名空间jQuery插件


按属性匹配的语法为:

$("div[customattr=bla]")匹配div customattr="bla"

$("[customattr]")将所有具有属性"customattr"

的标签匹配

具有像'custom:attr'这样的名称空间属性,它不起作用

在这里您可以找到很好的概述。


您应该使用$('div').attr('custom:attr')


这是对我有用的自定义选择器的实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Custom jQuery selector to select on custom namespaced attributes
$.expr[':'].nsAttr = function(obj, index, meta, stack) {

    // if the parameter isn't a string, the selector is invalid,
    // so always return false.
    if ( typeof meta[3] != 'string' )
        return false;

    // if the parameter doesn't have an '=' character in it,
    // assume it is an attribute name with no value,
    // and match all elements that have only that attribute name.
    if ( meta[3].indexOf('=') == -1 )
    {
        var val = $(obj).attr(meta[3]);
        return (typeof val !== 'undefined' && val !== false);
    }
    // if the parameter does contain an '=' character,
    // we should only match elements that have an attribute
    // with a matching name and value.
    else
    {
        // split the parameter into name/value pairs
        var arr = meta[3].split('=', 2);
        var attrName  = arr[0];
        var attrValue = arr[1];

        // if the current object has an attribute matching the specified
        // name & value, include it in our selection.
        return ( $(obj).attr(attrName) == attrValue );
    }
};

用法示例:

1
2
3
4
5
// Show all divs where the custom attribute matches both name and value.
$('div:nsAttr(MyNameSpace:customAttr=someValue)').show();

// Show all divs that have the custom attribute, regardless of its value.
$('div:nsAttr(MyNameSpace:customAttr)').show();

推荐阅读