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

Javascript 如何选择没有定义任何属性的HTML元素?,javascript,jquery,html,Javascript,Jquery,Html,我需要使用jQuery来定位所有没有属性的DIV标记,并对每个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> </

我需要使用jQuery来定位所有没有属性的DIV标记,并对每个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类型的元素?谢谢

$('#sidebar div')` or more general `$('div'); //returns collections of divs
要回答这个问题:

$('#sidebar div').addClass('myClass');
看看这个:

给你:

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

属性返回元素上设置的所有属性的列表。裸元素的属性列表为空


更新:请务必阅读下面的内容,它为旧版本的IE提供了解决方案,因为我自己的解决方案在IE8及以下版本中不起作用。

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

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


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

您可以使用jQuery和的组合。例如:

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

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

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

现场演示:

代码:



为了解释Tim Down的答案,我建议检查attrs var是否为null,在html有注释标记的特殊情况下,等等。

没有任何类型的属性,或者只是没有类属性?没有任何类型的属性,那么一个完全裸体的div:。有没有其他方法可以解决您正在做的事情而不必搜索裸体div?代码由SharePoint 2010内容查询web部件生成;富文本列表中的任何列值周围都有一个裸DIV。谢谢,Phil。但是那些div没有任何属性吗?换句话说,简单的div是什么?在本例中,div.something将成为div.something.myclasse,但它不符合OP的要求。。。这将把类“myClass”应用于已经有一个“something”类的div。另外,它没有找到OP想要的没有属性的div标记。这会将“myClass”添加到边栏div中,而OP也不想要。我给出了一个一般性的答案,他可以根据自己的示例进行自定义。这很好,但需要指出的是,这并不是一个完整的解决方案,因此人们不会盲目地将其复制到代码中,并假设它完全符合问题的要求。我否决了这个答案,因为它不符合OP的要求。也许如果你编辑答案说这是一种需要定制的通用方法,那会更好。我想说你的答案作为一个部分解决方案是有价值的,只需要这么说。似乎很脆弱,如果有任何其他类型的属性,这将不再有效。至少在我看来,使用jQuery选择器有更好的方法。谢谢,西蒙。这很有效。如何添加一种样式,使DIV不会导致换行?@Alex视情况而定。如果元素应该是内联的,则使用SPAN元素。另一个选项是浮动它。@Henry,但这就是目的:选择裸元素-没有任何类型属性的元素。我不知道为什么OP需要这个,但他的问题很清楚。@Alex啊,现在我明白了。。。您只想删除标记,而不是整个元素。在这种情况下,用DIV元素的内容替换DIV元素是有效的。是否有理由否决投票?如果我知道人们认为答案有什么问题,也许我可以修改答案?我的答案也是如此,只是发生了而已。很可能是因为我们的答案不符合确切的问题,尽管它们是一种更明智的方法。谢谢先生,非常感谢+1.说得好。我可以确认我的解决方案在IE9中有效,但在IE8中无效。谢谢,Tim。这是一个更全面的解决方案。你们太好了:
$('div:not([class], [id])').addClass('myClass');
$("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;
    }
});