JavaScript E4X - 노드와 자식의 텍스트를 반환 하시겠습니까?
-
13-12-2019 - |
문제
다음과 같은 코드 줄이있는 곳에있는 HTML을 파싱하려고 시도합니다.
<a>This is <span>some text</span> but its <span>not grabbing the span</span> content</a>
.
그래서 나는 물체를 반복하고 이것을 추출한다 :
object.a[i].text();
.
그러나 그 유일한 반환
"This is but its content"
.
아이들 노드 내의 텍스트를 하나의 문자열로 가져 오는 방법은 무엇입니까?
환호
해결책
나는 E4X를 모른다. 그러나 순수한 자바 스크립트가 괜찮다고 가정 할 수 있을까?
textContent
버전 9 이전에 IE에 대한 훌륭한 호환성을 갖는 것 같습니다.이것은 textContent
를 사용할 수있을 때 작동합니다.그러나 IE8이 없으므로 IT8을 사용하지 않아도됩니다. 그러나 이것은 작동해야합니다.
var obj = (!object.a[i].innerText) ? object.a[i].textContent : object.a[i].innerText;
.
클라이언트 측면 구현에서 작동하는
그러나 구현에서 작동하지 않으므로 설치에보다 구체적인 것을 필요로 할 것으로 생각합니다.불행히도 나는 거기에서 할 수있는 것이별로 없습니다.그러나 나는 하나의 순수한 JS 찌르기를 할 것입니다.이는 object.a [i]의 각 자식 노드를 통해 반복합니다. textnode 또는 elementnode인지 여부를 결정하고 데이터 또는 InnerHTML을 각각 가져옵니다.
var doesThisWork = '';
var children = object.a[i].childNodes;
for(x in children){
doesThisWork += (children[x].nodeType === 1) ? children[x].innerHTML : children[x].data;
}
.
jQuery 버전을 남길 게 :
object.a[i].contents().text();
. 다른 팁
Rhino에서 이것은 작동합니다 :
var a = <a>This is <span>some text</span> but its <span>not grabbing <b>the</b> span</span> content</a>;
.
print(XML_innerText(a));
function XML_innerText(node) {
var result = [];
for each (var i in node.descendants()) {
if (i.nodeKind() == 'text') {
result.push(i);
}
}
return result.join(' ');
}
.
ECMA / JS의 더 많은 고급 변형에서 동일한 코드를 사용하지만 xml.prototype.innertext로 이동 한 다음 a.innerText()
와 직접 호출하십시오.
제휴하지 않습니다 StackOverflow