我试图得到class = 4的子span。下面是一个示例元素:

<div id="test">
 <span class="one"></span>
 <span class="two"></span>
 <span class="three"></span>
 <span class="four"></span>
</div>

我可用的工具是JS和YUI2。我可以这样做:

doc = document.getElementById('test');
notes = doc.getElementsByClassName('four');

//or

doc = YAHOO.util.Dom.get('#test');
notes = doc.getElementsByClassName('four');

这些在IE中不起作用。我得到一个错误,对象(doc)不支持此方法或属性(getElementsByClassName)。我已经尝试了几个跨浏览器实现getElementsByClassName的例子,但我不能让他们工作,仍然得到了这个错误。

我认为我需要的是一个跨浏览器getElementsByClassName或我需要使用doc.getElementsByTagName('span')和循环,直到我找到类4。但我不知道该怎么做。


当前回答

2018年6月更新至ES6

    const doc = document.getElementById('test');
    let notes = null;
    for (const value of doc) {
        if (value.className === '4') {
            notes = value;
            break;
        }    
    }

其他回答

Let notes = document。querySelector(“#测试.four”)

使用element.querySelector()。 让我们假设: 'myElement'是你已经拥有的父元素。 'sonClassName'是你要找的子类的类。

let child = myElement.querySelector('.sonClassName');

欲了解更多信息,请访问:https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector

你可以试试:

notes = doc.querySelectorAll('.4');

or

notes = doc.getElementsByTagName('*');
for (var i = 0; i < notes.length; i++) { 
    if (notes[i].getAttribute('class') == '4') {
    }
}

使用带有getElementById的id名,前面没有#符号。然后你可以使用getElementsByTagName获取span子节点,并循环遍历它们以找到具有正确类的子节点:

var doc = document.getElementById('test');

var c = doc.getElementsByTagName('span');

var e = null;
for (var i = 0; i < c.length; i++) {
    if (c[i].className == '4') {
        e = c[i];
        break;
    }
}

if (e != null) {
    alert(e.innerHTML);
}

演示:http://jsfiddle.net/Guffa/xB62U/

我相信这能最好地回答你的问题

document.querySelector('* > span.four')

这将匹配它发现的第一个子元素(任何父元素),它是一个span,并且也有一个类“4”设置给它

但是,由于在您的示例中还有一个可以通过id检索的父元素,您也可以使用this代替

document.querySelector('#test > span.four')

如果您有一个父元素保存在一个变量中,就像您的例子中那样,并且您希望搜索该元素的子树,使用:scope(正如Billizzard已经提到的)可能是您的最佳选择

doc.querySelector(':scope > span.four');

额外提示:如果您要查找的子元素不是直接的子后代元素,而是在子树的更远位置,您实际上可以像这样省略>

document.querySelector('#test span.four')