假设我有一个简单的XHTML文档,它使用属性的自定义命名空间:
<html xmlns="..." xmlns:custom="http://www.example.com/ns">
...
<div class="foo" custom:attr="bla"/>
...
</html>
如何使用jQuery匹配具有特定自定义属性的每个元素?使用
$("div[custom:attr]")
不起作用。 (到目前为止仅使用Firefox试过。)
答案 0 :(得分:42)
jQuery不直接支持自定义命名空间,但您可以使用过滤功能找到您要查找的div。
// 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.');
});
答案 1 :(得分:19)
答案 2 :(得分:7)
按属性匹配的语法是:
$("div[customattr=bla]")
匹配div customattr="bla"
$("[customattr]")
匹配具有属性"customattr"
使用'custom:attr'
之类的命名空间属性
Here你可以找到一个很好的概述。
答案 3 :(得分:3)
您应该使用$('div').attr('custom:attr')
。
答案 4 :(得分:2)
以下是适用于我的自定义选择器的实现。
// 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 );
}
};
使用示例:
// 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();