我正在使用JavaScript来从DOM对象中提取所有文本.我的算法遍历DOM对象本身,它是后代,如果节点是TEXT_NODE类型而不是累积它的nodeValue.
出于一些奇怪的原因,我也得到了类似的东西:
#hdr-editions a { text-decoration:none; }
#cnn_hdr-editionS { text-align:left;clear:both; }
#cnn_hdr-editionS a { text-decoration:none;font-size:10px;top:7px;line-height:12px;font-weight:bold; }
#hdr-prompt-text b { display:inline-block;margin:0 0 0 20px; }
#hdr-editions li { padding:0 10px; }
Run Code Online (Sandbox Code Playgroud)
我该如何过滤?我需要使用其他东西吗?我只想要文字.
我试图添加一些包含几个空格的文本到svg文本元素.我完全不屑一顾,因为当有一个以上的空格后,它们被正确地添加到元素中但不会显示在浏览器窗口中.
这个人在这里使用文本元素中的空格,当我将其重现为静态时它工作正常,但是当用js添加文本时,空格会消失!
如何将带有空格的文本动态添加到svg?
谢谢任何答案!
var legend = document.createElementNS("http://www.w3.org/2000/svg", "text");
var tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
// Set any attributes as desired
legend.setAttribute("id","legend");
legend.setAttribute("text-anchor", "middle");
legend.setAttribute("alignment-baseline", "hanging");
legend.setAttribute("xml:space","preserve");
tspan.setAttribute("xml:space","preserve");
tspan.setAttribute("id","tspanObj");
var myText = document.createTextNode(legendTxt);
tspan.appendChild(myText);
legend.appendChild(tspan);
legend.setAttribute("x", Math.round(this.options.windowWidth/2));
legend.setAttribute("y", this.options.upperPadding+this.options.barH+this.options.legendDist);
this.elements.jSvgElem.append(legend);
Run Code Online (Sandbox Code Playgroud) 我有以下代码似乎在除IE8及以下的所有浏览器中都能正常工作.
$("table.availability").each( function() {
var siteName = $(this).parent().siblings("h2").contents().filter(function() { return this.nodeType == Node.TEXT_NODE; }).text()
alert(sitename);
});
Run Code Online (Sandbox Code Playgroud)
它获取元素的内容,并删除子元素中包含的所有内容,只留下该元素的文本.
我得到的错误说Node是未定义的 - 所以我将它声明在js文件的顶部然后得到相同的消息,TEXT_NODE所以我声明了.然后我得到以下错误:
Unable to get property 'TEXT_NODE' of undefined or null reference
任何人都可以帮我解决这个问题,或者任何人都可以想到一个更好的方法来获得相同的结果.谢谢.
我正在尝试编写一个函数,该函数将keyup在contentEditable div中为插入符号前面的元素提供引用.
如果插入符号位于文本节点中,则该函数应返回null.如果插入符号位于contentEditable的开头,则该函数应返回null.
但是如果插入符号位于文本节点的开头,并且此文本节点前面紧跟一个元素(如Span),则该函数应返回对此元素的引用.
并且,如果插入符号位于两个Html元素之间(例如,在两个Spans之间),则它应该返回对插入符号之前的元素的引用,即两个元素中的第一个.
如果有两个或多个文本节点紧跟在一起,则应将它们视为单个文本节点.
我已经开始拼凑一些东西了.我正在考虑使用范围偏移来计算我到文本节点的距离,但感觉过于复杂.我不禁想到有一些我没想到的明显的东西.
我得到用户选择的文字:
var selection = window.getSelection();
var selectRange = selection.getRangeAt(0);
var content = range.cloneContents(); // DocumentFragment
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得textNode的DocumentFragment内容?
我想在TreeWalker的文本节点中插入html标签,但TreeWalker强制我的html括号进入< > 无论我尝试过什么.这是代码:
var text;
var tree = document.createTreeWalker(document.body,NodeFilter.SHOW_TEXT);
while (tree.nextNode()) {
text = tree.currentNode.nodeValue;
text = text.replace(/(\W)(\w+)/g, '$1<element onmouseover="sendWord(\'$2\')">$2</element>');
text = text.replace(/^(\w+)/, '<element onmouseover="sendWord(\'$1\')">$1</element>');
tree.currentNode.nodeValue = text;
}
Run Code Online (Sandbox Code Playgroud)
使用\ <或"而不是'将无济于事.我的解决方法是将所有DOM树复制到一个字符串并用它替换html主体.它适用于非常简单的网页并解决我的第一个问题,但是糟糕的黑客攻击并不会在一个简单的页面上工作.我想知道我是否可以直接使用文本节点而不是使用解决方法.以下是(当前错误)解决方法的代码:
var text;
var newHTML = "";
var tree = document.createTreeWalker(document.body);
while (tree.nextNode()) {
text = tree.currentNode.nodeValue;
if (tree.currentNode.nodeType == 3){
text = text.replace(/(\W)(\w+)/g, '$1<element onmouseover="sendWord(\'$2\')">$2</element>');
text = text.replace(/^(\w+)/, '<element onmouseover="sendWord(\'$1\')">$1</element>');
}
newHTML += text
}
document.body.innerHTML = newHTML;
Run Code Online (Sandbox Code Playgroud)
编辑:我意识到更好的解决方法是自定义标记文本节点((Customtag_Start_Here)等),将整个DOM复制到字符串,并使用我的海关标签来识别文本节点并以这种方式修改它们.但如果我不必,我宁愿不要.
这个问题教会如何获取文档中的所有TextNode,这也是我的Javascript文本.过滤掉所有Javascript代码节点的最佳方法是什么?
我试图遵循与圆柱体,盒子......相同的简单逻辑,所以只需定义textNode的位置,但它不起作用.
func makeText(text3D: String, position: SCNVector3, depthOfText: CGFloat, color: NSColor, transparency: CGFloat) -> SCNNode
{
let textTodraw = SCNText(string: text3D, extrusionDepth: depthOfText)
textTodraw.firstMaterial?.transparency = transparency
textTodraw.firstMaterial?.diffuse.contents = color
let textNode = SCNNode(geometry: textTodraw)
textNode.position = position
return textNode
}
Run Code Online (Sandbox Code Playgroud)