클래스 = 4 인 자식 범위를 얻으려고합니다. 예제 요소는 다음과 같습니다.
<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를 찾을 때까지 반복해야합니다. 그래도 어떻게 해야할지 모르겠습니다.
답변
사용하여 doc.childNodes
각각의 반복에 span
, 그리고 그 하나의 필터 className
같음 4
:
var doc = document.getElementById("test");
var notes = null;
for (var i = 0; i < doc.childNodes.length; i++) {
if (doc.childNodes[i].className == "4") {
notes = doc.childNodes[i];
break;
}
}
답변
querySelector 및 querySelectorAll 사용
var testContainer = document.querySelector('#test');
var fourChildNode = testContainer.querySelector('.four');
IE9 이상
😉
답변
허용 된 답변은 직계 어린이 만 확인합니다. 종종 우리는 그 클래스 이름을 가진 자손을 찾고 있습니다.
또한 때로는 className 을 포함 하는 자식을 원할 수도 있습니다 .
예를 들어 : <div class="img square"></div>
그것은, 비록 클래스 명 “IMG”에 대한 검색과 일치해야 정확한 클래스 이름은 “IMG”가되지 않습니다.
이 두 가지 문제에 대한 해결책은 다음과 같습니다.
클래스가있는 자손 요소의 첫 번째 인스턴스를 찾습니다. className
function findFirstChildByClass(element, className) {
var foundElement = null, found;
function recurse(element, className, found) {
for (var i = 0; i < element.childNodes.length && !found; i++) {
var el = element.childNodes[i];
var classes = el.className != undefined? el.className.split(" ") : [];
for (var j = 0, jl = classes.length; j < jl; j++) {
if (classes[j] == className) {
found = true;
foundElement = element.childNodes[i];
break;
}
}
if(found)
break;
recurse(element.childNodes[i], className, found);
}
}
recurse(element, className, false);
return foundElement;
}
답변
element.querySelector ()를 사용하십시오. ‘myElement’는 이미 가지고있는 상위 요소입니다. ‘sonClassName’은 찾고있는 자녀의 클래스입니다.
let child = myElement.querySelector('.sonClassName');
자세한 내용을 보려면 다음 사이트를 방문하십시오 : https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector
답변
시도해 볼 수 있습니다 :
notes = doc.querySelectorAll('.4');
또는
notes = doc.getElementsByTagName('*');
for (var i = 0; i < notes.length; i++) {
if (notes[i].getAttribute('class') == '4') {
}
}
답변
나에게 네 번째 범위를 원하는 것 같습니다. 그렇다면 다음을 수행하십시오.
document.getElementById("test").childNodes[3]
또는
document.getElementById("test").getElementsByTagName("span")[3]
이 마지막 방법은 엉망이 될 수있는 숨겨진 노드가 없는지 확인합니다.
답변
그러나 이전 브라우저는을 지원하지 않습니다 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 클래스는
- AZ 또는 az로 시작해야합니다.
- 뒤에 문자 (A-Za-z), 숫자 (0-9), 하이픈 ( “-“) 및 밑줄 ( “_”)이 올 수 있습니다.