2012-09-26 5 views
0

우리는이 코드첫 번째 nextSibling 이후에 nextSibling을 얻는 방법?

str.parentNode.nextSibling.tagName 

을 실행하고 그에 따라 이름을 얻을 수 있습니다. 우리에게 필요한 것은이 nextSibling 그래서 우리는이

str.parentNode.childNodes[3].tagName 

가 작동하지 않는 시도 nextSibling 이후? 이것에 대한 해결책은 무엇입니까?

답변

1

주를 그 요소의 nextSibling태그 이름 속성이 없습니다, 또는 전혀 존재하지 않을 수 있습니다 텍스트 노드를 수 있습니다 이 경우 nextSiblingundefined이고 해당 tagName 속성에 액세스하려고하면 오류가 발생합니다.

그래서 당신은 가능성이 같은 뭔가 할 원하는 :

var nextSibling = getNextElementSibling(str.parentNode); 
var tagName = nextSibling? nextSibling.tagName : ''; // or maybe undefined 

if (tagName) { 
    // do stuff 

} else { 
    // no element sibling was found 
} 

getNextElementSibling 기능입니다 뭔가 같은 :

function getNextElementSibling(node) { 

    while (node && (node = node.nextSibling)) { 
    if (node.nodeType == 1) { 
     return node; 
    } 
    } 
    // return undefined 
} 
+0

당신은 바로 그 공간이 특히 사이에 정의되지 않은 원인이되는 커다란 문제입니까? – user132638

2

childNodes[3]은 두 번째 다음 형제가 아닌 parentNode의 네 번째 자식을 반환합니다.

해당 노드를 얻으려면, 당신은 두 번 nextSibling을 적용 할 수

var tagName = str.parentNode.nextSibling.nextSibling.tagName; 
+0

그래서 이것은이 같은 str.parentNode.childNodes [입니다 다음합니까 무엇 2] .tagName? – user132638

+0

@user, 아니요, str.parentNode.parentNode.childNodes [ + 1] .tagName'과 같은 것을합니다. –

관련 문제