Javascript 제거하는 공백을 할 때 그것은 없?
-
03-07-2019 - |
문제
나는 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이 무시됩니다. 비 분해 공간을 사용하기 위해 공간을 유지하는 유일한 보장 된 방법
.
팁으로, 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;