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


当前回答

另一种方式

const result = [...(parentElement.children)].find(child => {
  return child.classList.contains('some-class-name');
});

首先,我们展开NodeList的元素,将其转换为Array,以便使用find()方法。最后,find()将返回classList属性包含给定类名的第一个元素。

其他回答

你可以试试:

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

or

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

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

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

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

使用querySelector

var doc=document.getElementById(“test”); console.log(doc.querySelector('.two').innerHTML) <div id=“test”> <span class=“one”></span> <span class=“two”>two</span> <span class=“three”></span> <span class=“four”></span> </div> 使用 querySelectorAll

var doc=document.getElementById(“test”); console.log(doc.querySelectorAll('*')[1].innerHTML) <div id=“test”> <span class=“one”></span> <span class=“two”>two</span> <span class=“three”></span> <span class=“four”></span> </div>

使用getelementsbytagname

var doc=document.getElementById(“test”); console.log(doc.getElementsByTagName(“SPAN”)[1].innerHTML); <div id=“test”> <span class=“one”></span> <span class=“two”>two</span> <span class=“three”></span> <span class=“four”></span> </div> <span>党卫军</span>

使用getElementsByClassName

var doc=document.getElementById(“test”); console.log(doc.getElementsByClassName('two')[0].innerHTML) <div id=“test”> <span class=“one”></span> <span class=“two”>two</span> <span class=“three”></span> <span class=“four”></span> </div>

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

但是要注意,旧的浏览器不支持getElementsByClassName。

然后,你就可以做了

function getElementsByClassName(c,el){
    if(typeof el=='string'){el=document.getElementById(el);}
    if(!el){el=document;}
    if(el.getElementsByClassName){return el.getElementsByClassName(c);}
    var arr=[],
        allEls=el.getElementsByTagName('*');
    for(var i=0;i<allEls.length;i++){
        if(allEls[i].className.split(' ').indexOf(c)>-1){arr.push(allEls[i])}
    }
    return arr;
}
getElementsByClassName('4','test')[0];

看起来是可行的,但要注意HTML类

必须以字母开头:a-z还是a-z 后面可以跟着字母(A-Za-z)、数字(0-9)、连字符(-)和下划线(_)。