我试图得到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。但我不知道该怎么做。


当前回答

我知道这个问题已经存在几年了,也有一些答案,但我想我会补充我的解决方案,以防它能帮助到任何人。它与user2795540给出的答案相同,并且涉及一个数组迭代器。

如果你只是想要得到第一个有四个类的子类,那么你可以使用find array迭代器。你的浏览器需要能够支持ES6,或者你可以使用Babel将你的JS编译成所有浏览器都支持的东西。没有polyfill, IE将不支持此功能。

使用你在问题中提供的相同细节,它可以是这样的:

const parentNode = document.getElementById('test');
const childNode = Array.from(parentNode.childNodes).find(({ className }) => className === 'four');

上面的解决方案将返回您想要的目标节点,并将其存储在childNode变量中。

你可以在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find上找到更多关于find数组迭代器的信息

其他回答

我知道这个问题已经存在几年了,也有一些答案,但我想我会补充我的解决方案,以防它能帮助到任何人。它与user2795540给出的答案相同,并且涉及一个数组迭代器。

如果你只是想要得到第一个有四个类的子类,那么你可以使用find array迭代器。你的浏览器需要能够支持ES6,或者你可以使用Babel将你的JS编译成所有浏览器都支持的东西。没有polyfill, IE将不支持此功能。

使用你在问题中提供的相同细节,它可以是这样的:

const parentNode = document.getElementById('test');
const childNode = Array.from(parentNode.childNodes).find(({ className }) => className === 'four');

上面的解决方案将返回您想要的目标节点,并将其存储在childNode变量中。

你可以在https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find上找到更多关于find数组迭代器的信息

下面是我如何使用YUI选择器做到这一点。感谢汉克·盖伊的建议。

notes = YAHOO.util.Dom.getElementsByClassName('four','span','test');

其中four = classname, span =元素类型/标签名,test =父id。

我将使用jquery这样做的方式是这样的..

Var targetedchild = $("#test").children().find("span.four");

使用带有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/

使用querySelector和querySelectorAll

var testContainer = document.querySelector('#test');
var fourChildNode = testContainer.querySelector('.four');

IE9及以上版本