如何在javascript中选择具有特定属性的范围

如何在javascript中选择具有特定属性的范围,javascript,Javascript,我试图操纵具有电子邮件属性的跨距,这是我的代码: var spans = document.getElementsByTagName("span"), index, node, emailAttr; for (index = 0; index < spans.length; ++index) { node = spans.item(index); emailAttr = node.getAttribute("email"); if (emailAttr) {

我试图操纵具有电子邮件属性的跨距,这是我的代码:

var spans = document.getElementsByTagName("span"),
    index, node, emailAttr;
for (index = 0; index < spans.length; ++index) {
    node = spans.item(index);
    emailAttr = node.getAttribute("email");
    if (emailAttr) {
        // Do something with `node` and `emailAttr`
    }
}
在最后一个if语句之前,一切都进行得很顺利,它可以找到跨度,但对于具有email属性的跨度没有结果。这里怎么了

这是我试图扫描的html代码的一部分:

<span class="yP" email="nobody@mozilla.org">Mozilla Add-ons</span>

注意:我不想使用jQuery

没有电子邮件属性。在HTML5中,输入元素可以具有电子邮件类型。然而,HTML5不是一个标准,任何浏览器都不完全支持HTML5,大多数旧浏览器只支持与当前HTML标准HTML4.01兼容的部分

如果您希望与HTML5兼容,那么非标准属性应该使用数据前缀,因此您应该使用数据电子邮件

若要确定元素是否具有特定属性,而不是属性是否具有真值,则可以考虑该方法。然而,一些浏览器(例如IE<9)不支持它,并且没有可行的解决方法,一些浏览器尝试解析元素的outerHTML,但我不建议这样做。此外,您必须使用getAttribute读取该值,因为早期版本的Firefox和其他浏览器不会为非标准属性创建元素属性

更广泛支持的一个选项是使用数据电子邮件属性,该属性始终具有真实值,即除空字符串以外的任何值。这样就可以使用getAttribute进行测试

另一种方法是使用一个类,以便任何应该具有该属性的元素也具有该类,例如

<span class="... email ..." data-email="foo@bar.com">foo</span>

还有-可能getAttribute返回一个真实的伪值。另外,使用数据属性和HTML5 doctype。另外,提供一个jsFiddle.hasAttribute返回相同的东西..在这个jsFiddle中没有任何东西对我有效:–你确定要在DOM中存在后调用它吗?在使用电子邮件而不是数据电子邮件时也有效,并且doctype设置为HTML4 Strict: