2012-11-14 1 views
3

IE8 이하를 제외한 모든 브라우저에서 정상적으로 작동하는 것으로 보이는 다음 코드가 있습니다.Javascript 'Node'가 IE8 이하에서 정의되지 않았습니다.

$("table.availability").each(function() { 
    var siteName = $(this).parent().siblings("h2").contents().filter(function() { return this.nodeType == Node.TEXT_NODE; }).text() 
    alert(sitename); 
}); 

요소의 내용을 가져 와서 해당 요소의 텍스트를 그대로두고 자식 요소 내에 포함 된 모든 것을 제거합니다.

Node은 정의되지 않았습니다. 따라서 js 파일의 맨 위에 선언 한 다음 TEXT_NODE에 대한 동일한 메시지를받습니다. 그때 나는 다음과 같은 오류가 발생합니다 :

Unable to get property 'TEXT_NODE' of undefined or null reference

사람은이 문제를 해결하는 데 도움이 수 또는 사람이 같은 결과를 얻을 수있는 더 나은 방법을 생각할 수 있습니다. 감사.

답변

8

TEXT_NODE 상수는 value of 3입니다. IE의

return this.nodeType === 3; 

이전 버전 그냥 Node 인터페이스를 구현하지 않습니다,하지만 그들은 여전히 ​​DOM 사양에 따라 올바른 nodeType 속성 값을 할당 할 : 당신은 그냥 사용할 수 있습니다. 당신은 "상수"를 사용하려면

것은, 당신은 Node 객체를 직접 선언 할 수

var Node = Node || { 
    ELEMENT_NODE: 1, 
    ATTRIBUTE_NODE: 2, 
    TEXT_NODE: 3 
    // etc... if you might need other node types 
}; 
0

을 당신이 구조가이 같은 것입니다 것 같은데요 :

<h2> 
    text to filter 
    <span>other text</span> 
</h2> 

그리고 h2 내부의 "다른 텍스트"를 걸러 내기 위해 노력하고 있습니까? 그렇다면 필요한 텍스트 주위에 다른 태그 래퍼를 추가하는 것이 좋습니다.

<h2> 
    <span class="text-to-filter">text to filter</span> 
    <span>other text</span> 
</h2> 

그 작업을 수행합니다 windownode을 변경 IE8 및 버전 노드가 작동하지 않습니다 아래

$(this).parent().siblings("h2").find('.text-to-filter').text() 
1

은 날 위해 일했습니다.