我正在尝试编写一个jquery选择器,它将选择对其两个属性具有相同值的对象。
这样的事情:
$('div[attr1=attr2]')
假设:
<div attr1="foo" attr2="bar">A</div>
<div attr1="bar" attr2="bar">B</div>
<div attr1="foo" attr2="bar">C</div>
<div attr1="foo" attr2="foo">D</div>
我希望它返回B和D div的链接。
有什么想法吗?
答案 0 :(得分:7)
您可以使用custom selectors with arguments执行此操作。
$('div:attrEqual(attr1 attr2)')
您可以像这样定义自定义选择器:
$.expr[':'].attrEqual = function(obj, index, meta, stack) {
var attrs = meta[3].split(" ");
return $(obj).attr(attrs[1]) == $(obj).attr(attrs[0]);
};
为了提高性能,请将[attr1][attr2]
添加到选择器,以便本机DOM筛选出不具有这两个属性的节点。
答案 1 :(得分:5)
我认为属性选择器只允许您与常量值进行比较。但您可以使用.filter()
函数进行比较:
$('div[attr1][attr2]').filter(function(index) {
return $(this).attr('attr1') == $(this).attr('attr2');
})
答案 2 :(得分:1)
这样的事情可以解决问题(The Fiddle):
function GetWithSameAttributes (parID)
{
var output = new Array();
$('#'+parID).children().each(function ()
{
if ($(this).is('[attr1="'+$(this).attr('attr2')+'"]'))
output.push($(this).html());
});
return output;
}
$(function ()
{
for (val in GetWithSameAttributes('Items'))
document.writeln(val + ' has the same attributes<BR/>');
});
使用html之类的东西:
<div id="Items">
<div attr1="foo" attr2="bar">A</div>
<div attr1="bar" attr2="bar">B</div>
<div attr1="foo" attr2="bar">C</div>
<div attr1="foo" attr2="foo">D</div>
</div>
答案 3 :(得分:1)
如果我说得对,你想知道任何属性是否具有相同的值,无论其名称如何。你可以这样做:
$("div").filter(function(){
var attributes = this.attributes,
i = attributes.length,
attrValues = [],
$that = $(this);
if(i !== 1) {
while( i-- ) {
var attr = attributes[i];
attrValues.push(attr.value);
}
attrValues = attrValues.sort();
if(attrValues[0] === attrValues[1]) {
return $that; //only checks between two attributes, but you could extend that
}
})
答案 4 :(得分:0)
使用双等号(==)检查语句中的相等性。单等于(=)用于分配。 所以如果($('div [attr1] == div [attr2]'){做某事});