如何选择没有定义任何属性的HTML元素?

时间:2011-08-10 12:39:17

标签: javascript jquery html

我需要使用jQuery来查找所有没有属性的DIV标记,并为每个标记应用一个类。这是一个示例HTML:

<div id="sidebar">
  <div>Some text goes here</div>
  <div class="something">something goes here</div>
  <div>Another div with no attributes.</div>
</div>

所以,我需要把它变成这个:

<div id="sidebar">
  <div class="myClass">Some text goes here</div>
  <div class="something">something goes here</div>
  <div class="myClass">Another div with no attributes.</div>
</div>

如何通过jQuery找到没有属性的div类型的元素?感谢。

8 个答案:

答案 0 :(得分:16)

你走了:

$('div', '#sidebar').filter(function () {
    return this.attributes.length === 0;
})

现场演示: http://jsfiddle.net/phbU9/

attributes属性返回元素上设置的所有属性的列表。 “Naked”元素有一个空的attributes列表。

更新:请务必阅读下面的Tim's answer,它为旧版本的IE提供解决方案,因为我自己的解决方案在IE8及以下版本中无效。

答案 1 :(得分:2)

<Šime的答案很接近,但在IE 6,7或8中不起作用,其中元素的attributes集合具有每个可能属性的条目,而不仅仅是HTML中指定的属性。您可以通过检查每个属性对象的specified属性来解决此问题。

现场演示:http://jsfiddle.net/timdown/6MqmK/1/

代码:

$("div").filter(function() {
    var attrs = this.attributes, attrCount = attrs.length;
    if (attrCount == 0) {
        return true;
    } else {
        for (var i = 0; i < attrCount; ++i) {
            if (attrs[i].specified) {
                return false;
            }
        }
        return true;
    }
});

答案 2 :(得分:0)

答案 3 :(得分:0)

你需要提供某种选择器,在这种情况下我已经使用了你的侧栏,但它可以是任何东西。然后获取没有class属性的子项并添加一个新类。有关示例,请参阅JSFiddle:

http://jsfiddle.net/HenryGarle/q3x5W/

  $("#sidebar").children('div:not([class])').addClass('newClass');

因此,这将返回没有类标记的2个元素,并使侧栏和div完全不受影响。

答案 4 :(得分:0)

您可以结合使用jQuery的has attribute selectornot selector。例如:

$('div:not([class], [id])').addClass('myClass');

jsFiddle demonstrating this

使用这种方法,您需要明确指定要检查其存在的属性。 Sime的解决方案将该类应用于根本没有任何属性的div。

答案 5 :(得分:0)

为了阐述Tim Down的答案,我建议检查attrs var not null html具有注释标签的特殊情况等。

答案 6 :(得分:-1)

尝试$('div:not([class])')。addClass('myClass'); 这是一种通用方法,因为该类将适用于所有没有类

的div

答案 7 :(得分:-6)

$('#sidebar div')` or more general `$('div'); //returns collections of divs

回答这个问题:

$('#sidebar div').addClass('myClass');