답변:
글쎄요 ... 물론 이죠. 부모와 아이들에게 접근하세요.
node.parentNode.childNodes[]
또는 ... jQuery 사용 :
$('#innerId').siblings()
편집 : 클레 터스는 항상 영감을줍니다. 나는 더 파다. 이것은 jQuery가 본질적으로 형제를 얻는 방법입니다.
function getChildren(n, skipMe){
var r = [];
for ( ; n; n = n.nextSibling )
if ( n.nodeType == 1 && n != skipMe)
r.push( n );
return r;
};
function getSiblings(n) {
return getChildren(n.parentNode.firstChild, n);
}
var sibling = node.nextSibling;
이것은 바로 뒤에 형제를 반환하거나 더 이상 형제를 사용할 수없는 null을 반환합니다. 마찬가지로 다음을 사용할 수 있습니다.previousSibling
.
[편집] 다시 생각하면 이것은 다음 div
태그를 제공하지 않고 노드 뒤에 공백을 제공합니다. 더 나은 것 같습니다
var sibling = node.nextElementSibling;
또한 존재한다 previousElementSibling
.
빨리:
var siblings = n => [...n.parentElement.children].filter(c=>c!=n)
https://codepen.io/anon/pen/LLoyrP?editors=1011
부모의 자식을 배열로 가져오고이 요소를 필터링합니다.
편집하다:
텍스트 노드를 필터링하려면 ( pmrotule 에게 감사 드립니다 ) :
var siblings = n => [...n.parentElement.children].filter(c=>c.nodeType == 1 && c!=n)
[ ...n.parentNode.children ].filter(c => c.nodeType == 1 && c != n)
2017 년부터 :
간단한 대답 : element.nextElementSibling
올바른 요소 형제를 얻기 위해. 또한 당신은 element.previousElementSibling
이전 것
여기에서 모든 다음 치찰음을 얻는 것은 매우 간단합니다.
var n = element, ret = [];
while (n = n.nextElementSibling){
ret.push(n)
}
return ret;
next
또는 뿐만 아니라 모든 형제를 반환해야합니다 previous
. 이 경우 정확히 뒤로 또는 앞으로 이동하도록 지정하는 것은 큰 도움이되지 않습니다.
몇 가지 방법이 있습니다.
다음 중 하나가 트릭을 수행해야합니다.
// METHOD A (ARRAY.FILTER, STRING.INDEXOF)
var siblings = function(node, children) {
siblingList = children.filter(function(val) {
return [node].indexOf(val) != -1;
});
return siblingList;
}
// METHOD B (FOR LOOP, IF STATEMENT, ARRAY.PUSH)
var siblings = function(node, children) {
var siblingList = [];
for (var n = children.length - 1; n >= 0; n--) {
if (children[n] != node) {
siblingList.push(children[n]);
}
}
return siblingList;
}
// METHOD C (STRING.INDEXOF, ARRAY.SPLICE)
var siblings = function(node, children) {
siblingList = children;
index = siblingList.indexOf(node);
if(index != -1) {
siblingList.splice(index, 1);
}
return siblingList;
}
참고 : jQuery 코드 기반은 A 급 자바 스크립트를 관찰 할 수있는 훌륭한 리소스입니다.
다음은 매우 간소화 된 방식으로 jQuery 코드 기반을 보여주는 훌륭한 도구입니다. http://james.padolsey.com/jquery/
다음은 이전, 다음 및 모든 형제 (양쪽)를 얻는 방법입니다.
function prevSiblings(target) {
var siblings = [], n = target;
while(n = n.previousElementSibling) siblings.push(n);
return siblings;
}
function nextSiblings(target) {
var siblings = [], n = target;
while(n = n.nextElementSibling) siblings.push(n);
return siblings;
}
function siblings(target) {
var prev = prevSiblings(target) || [],
next = nexSiblings(target) || [];
return prev.concat(next);
}
사용 document.querySelectorAll () 과 루프와 반복
function sibblingOf(children,targetChild){
var children = document.querySelectorAll(children);
for(var i=0; i< children.length; i++){
children[i].addEventListener("click", function(){
for(var y=0; y<children.length;y++){children[y].classList.remove("target")}
this.classList.add("target")
}, false)
}
}
sibblingOf("#outer >div","#inner2");
#outer >div:not(.target){color:red}
<div id="outer">
<div id="inner1">Div 1 </div>
<div id="inner2">Div 2 </div>
<div id="inner3">Div 3 </div>
<div id="inner4">Div 4 </div>
</div>
var childNodeArray = document.getElementById('somethingOtherThanid').childNodes;
1) 선택한 클래스를 대상 요소에 추가
2) 대상 요소를 제외한 부모 요소의 모든 자식 찾기
3) 대상 요소에서 클래스 제거
<div id = "outer">
<div class="item" id="inner1">Div 1 </div>
<div class="item" id="inner2">Div 2 </div>
<div class="item" id="inner3">Div 3 </div>
<div class="item" id="inner4">Div 4 </div>
</div>
function getSiblings(target) {
target.classList.add('selected');
let siblings = document.querySelecttorAll('#outer .item:not(.currentlySelected)')
target.classList.remove('selected');
return siblings
}