假设我有一个简单的XHTML文档,该文档使用自定义名称空间作为属性:
1 2 3 4 5
| <html xmlns="..." xmlns:custom="http://www.example.com/ns">
...
...
</html> |
如何使用jQuery匹配具有特定自定义属性的每个元素?使用
不起作用。 (到目前为止,仅尝试使用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(); |