문제

나는 HTML 파일 코드를 다음과 같습니다.

<table>
    <tr>
    <td id="MyCell">Hello  World</td>
    </tr>
</table>

나 javascript 를 사용하여 다음과 같은 값을 얻

document.getElementById(cell2.Element.id).innerText

이 텍스트를 반환합니다"Hello World!"1 사이에 공간 안녕하고 있습니다.내 계속 동일 수의 공간,거기에 대해 어떤 방법으로는 할 수 있습니까?

해봤을 사용하여 innerHTML,outerHTML 및 이와 유사한 품목이 있습니다.

도움이 되었습니까?

해결책

HTML은 공백 insestitive이므로 DOM도 마찬가지입니다. "Hello World"를 감싸고 있습니다 사전 블록 작업?

다른 팁

HTML에서 텍스트를 표시하고 DOM을 통해 검색 할 때 모든 공간> 1이 무시됩니다. 비 분해 공간을 사용하기 위해 공간을 유지하는 유일한 보장 된 방법 &nbsp;.

팁으로, InnerText는 Internet Explorer에서만 작동하지만 InnerHTML은 모든 브라우저에서 작동합니다. 따라서 InnerText 대신 InnerHTML을 사용하십시오.

그만큼 pre 태그 또는 white-space: pre CSS에서는 모든 공간을 의미있는 것으로 취급합니다. 그러나 이것은 또한 최신 라인을 라인 브레이크로 바꿀 것이므로 조심하십시오.

방금 확인하면 사전 태그가해야합니다.

편집 : 나는 틀렸다.

텍스트 노드의 nodevalue를 얻을 수 있으며, 이는 공백을 올바르게 나타냅니다.

다음은 주어진 요소 내에서 텍스트를 재귀 적으로 가져 오는 기능입니다 (그리고 Array.Prototype 등을 수정하는 것을 사용하는 경우 라이브러리-안전합니다.

var textValue = function(element) {
    if(!element.hasOwnProperty('childNodes')) {
        return '';
    }
    var childNodes = element.childNodes, text = '', childNode;
    for(var i in childNodes) {
        if(childNodes.hasOwnProperty(i)) {
            childNode = childNodes[i];
            if(childNode.nodeType == 3) {
                text += childNode.nodeValue;
            } else {
                text += textValue(childNode);
            }
        }
    }
    return text;
};

표준의 조언이 아니라 여기에 의견이 있지만, 당신은 당신이 추출하려고한다면 세상을 향하고 있습니다. 정확한 JavaScript를 통한 내부/외부 HTML/텍스트 속성을 사용하여 DOM의 텍스트 값. 브라우저가 내부 문서를 "보는 방식"에 따라 다른 브라우저가 약간 다른 값을 반환합니다.

가능하다면 HTML을 변경하고 숨겨진 입력을 포함하도록 렌더링하고 있습니다.

<table>
    <tr>
    <td id="MyCell">Hello  World<input id="MyCell_VALUE" type="hidden" value="Hello  World" /></td>
    </tr>
</table>

그런 다음 JavaScript와 같은 가치를 얻으십시오

document.getElementById(cell2.Element.id+'_VALUE').value

입력 태그는 값을 유지하도록 설계되었으며 충실도 문제가 발생할 가능성이 적습니다.

또한 어떤 종류의 .NET 컨트롤을 사용하는 것처럼 들립니다. 컨트롤이 어떤 종류의 공식 클라이언트 측 API를 제공하는지 확인하기 위해 문서 (HA)를 살펴 보거나 약간 다른 질문을하는 것이 좋습니다.

이것은 비트 해키지만,그것은 작품에 나 IE.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
    <title></title>
</head>
<body>
<div id="a">a  b</div>
<script>
var a = document.getElementById("a");
a.style.whiteSpace = "pre"
window.onload = function() {
    alert(a.firstChild.nodeValue.length) // should show 4
}
</script>
</body>
</html>

일부 사항:

  • 당신이 있어야 합 doctype.
  • 쿼리할 수 없습 DOM 요소기 전에 창입니다.onload 가 발생
  • 당신이 사용해야 하는 요소입니다.nodeValue 대신 innerHTML et al 버그를 방지하기 위하여 텍스트를 포함 같은 것들 < >&"
  • 재설정할 수 없는 공백은 한 번 IE 렌더링을 완료 페이지가 무엇 때문에 나는 가정입니다 못생긴 bug

누군가 내 마지막 게시물을 올바르게 포맷 할 수 있다면 더 읽기 쉬운 것처럼 보일 것입니다. 죄송합니다. 기본적으로 트릭은 생성 사전 요소를 작성한 다음 노드 사본을 추가하는 것입니다. 그런 다음 브라우저에 따라 InnerText 또는 TextContent를 얻을 수 있습니다.

IE를 제외한 모든 브라우저는 기본적으로 명백한 일을 정확하게 수행합니다. 즉,이 핵은 사전 요소에서 흰색 공간을 보존하고 내부 텍스트에 액세스 할 때만 해킹이 필요합니다.

이 트릭은 IE의 내부 텍스트에서 흰색 공간을 보존합니다

var cloned = element.cloneNode(true);
var pre = document.createElement("pre");
pre.appendChild(cloned);
var textContent = pre.textContent
  ? pre.textContent
  : pre.innerText;
delete pre;
delete cloned;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top