如何使用jquery检查两个属性是否具有相同的值?

时间:2011-08-25 21:13:19

标签: jquery

我正在尝试编写一个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的链接。

有什么想法吗?

5 个答案:

答案 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)

如果我说得对,你想知道任何属性是否具有相同的值,无论其名称如何。你可以这样做:

http://jsfiddle.net/zuwZh/2/

$("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]'){做某事});