문제

다음과 같은 코드 줄이있는 곳에있는 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()와 직접 호출하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top