我当前的项目涉及根据提供的选择器从元素及其所有后代收集文本内容.
例如,当提供选择器#content并针对此HTML运行时:
<div id="content">
<p>This is some text.</p>
<script type="text/javascript">
var test = true;
</script>
<p>This is some more text.</p>
</div>
Run Code Online (Sandbox Code Playgroud)
我的脚本将返回(经过一些小空格清理):
这是一些文字.var test = true; 这是一些更多的文字.
但是,我需要忽略<script>元素中出现的文本节点.
这是我当前代码的摘录(从技术上讲,它基于一个或多个提供的选择器进行匹配):
// get text content of all matching elements
for (x = 0; x < selectors.length; x++) { // 'selectors' is an array of CSS selectors from which to gather text content
matches = Sizzle(selectors[x], document);
for (y = 0; y < matches.length; y++) {
match = matches[y]; …Run Code Online (Sandbox Code Playgroud) Firefox 3可以使用JS选择多个文本区域。有没有办法在Chrome和IE中执行此操作?
我确实试图在Chrome和IE9的网页中找到一种选择多个文本区域的方法。
信息位于:http : //help.dottoro.com/ljxsqnoi.php
例如:http: //jsfiddle.net/t3sWz/
仅代码FireFox3.5 + ...(但这是问题):
<html>
<head>
<meta charset="UTF-8">
<style>
#trigger { background: yellow }
</style>
</head>
<body>
<p id="test">
This is some text you can highlight by dragging or clicking below.
</p>
<span id="trigger">
Click here to select "This" and "some"
</span>
<a> - Firefox only :-(</a>
<br>
<br>
<br>
<br>
<br>
<input type="button" value="Get selection" onmousedown="getSelText()">
<form name=aform>
<textarea name="selectedtext" rows="5" cols="20">
</textarea>
</form>
<script>
var testCase = function() …Run Code Online (Sandbox Code Playgroud) 我在for循环中有这个Javascript:
renderAElements[i] = document.createElement ("a");
renderAElements[i].setAttribute("href", "#");
renderAElements[i].setAttribute("class", "expander");
renderAElements[i].appendChild(expand);
alert (renderAElements[i].nodeValue);
Run Code Online (Sandbox Code Playgroud)
其中expand创建为:
var expand = document.createTextNode("+");
Run Code Online (Sandbox Code Playgroud)
警报,用于返回每个已创建元素的链接文本,返回null.为什么是这样?
在使用此查询之前,我已使用XPath选择具有最大整数id值的节点:
//somenode[not(@id <= preceding::somenode/@id) and not(@id <= following::somenode/@id)]
Run Code Online (Sandbox Code Playgroud)
我希望我可以做类似的事情:
//entry[not(string-length(child::text()) <= string-length(preceding::entry/child::text())) and not(string-length(child::text()) <= string-length(following::entry/child::text()))]
Run Code Online (Sandbox Code Playgroud)
但它返回一堆节点而不是一个节点.
示例XML:
<xml>
<entry>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</entry>
<entry>Nam dignissim mi a massa mattis rutrum eu eget mauris.</entry>
<entry>Ut at diam a sem scelerisque pretium nec pulvinar purus.</entry>
<entry>Nunc in nisi nec dolor accumsan suscipit vel a quam.</entry>
<entry>Nunc suscipit lobortis arcu, nec adipiscing libero bibendum nec.</entry>
<entry>Aenean eget ipsum et nunc eleifend scelerisque.</entry>
<entry>In eu magna et diam volutpat molestie.</entry> …Run Code Online (Sandbox Code Playgroud) 如何删除单个动态创建的文本节点?
我正在生成输入,并使用.createTextNode在元素之前放置描述性文本.我需要能够删除正在创建的特定元素并使用.removeChild来执行此操作.这适用于删除单个输入,因为我有引用的内容(id/name).有没有办法为每个文本节点设置某种引用,以便我可以将其与相应的输入控件一起删除?
var box = document.getElementById("myDiv");
box.appendChild(document.createTextNode('Status: '));
var inp = document.createElement('input');
inp.type = 'text';
// add attributes, etc...
box.appendChild(inp);
Run Code Online (Sandbox Code Playgroud) 假设我有:
<div>Some variable amount of text.</div>
Run Code Online (Sandbox Code Playgroud)
如何获取 div 中文本的宽度(以像素为单位)?
请记住,不同 div 的文本量会发生不可预测的变化。
谢谢!
假设我有这样的标记
<html id="test">
<body>
Some text node.
<div class="cool"><span class="try">This is another text node.</span></div>
Yet another test node.
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我的js代码
function countText(node){
var counter = 0;
if(node.nodeType === 3){
counter+=node.nodeValue.length;
countText(node);
}
else{}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我想计算文本节点
console.log("count text : " + countText(document.getElementById("test"));
Run Code Online (Sandbox Code Playgroud)
这应该归还给我计数,但它不起作用,而且我应该把它放在其他条件下.我从未使用过nodeType,因此使用它时遇到了问题.任何帮助将不胜感激.
$html = $("<!-- comment --> <p>text</p>");
Run Code Online (Sandbox Code Playgroud)
像这样创建一个jQuery集合
$( [the comment], [text node], p )
Run Code Online (Sandbox Code Playgroud)
我怎样才能访问该段落?.find("p")返回一个空集合
而且,对于额外的积分,
$html = $("<p>text</p>");
Run Code Online (Sandbox Code Playgroud)
像这样创建一个jQuery集合
$( p )
Run Code Online (Sandbox Code Playgroud)
是否有一种失败的安全方式来获取p,只有p,无论评论是否存在都有效?
反正有没有为textNode分配一个id,然后通过该id检索该文本节点?我已经尝试了几种不同的方法,并继续得到错误,说不能获得null的属性.
我的代码看起来像这样......
var myDiv = document.createdElement('div');
myDiv.id = "textContainer";
var textNode = document.createdTextNode("some text");
textNode.id = "descriptionText";
myDiv.appendChild(textNode);
Run Code Online (Sandbox Code Playgroud)
在这一点上工作得很好; 它显示在页面上.后来我尝试修改那个文本节点,这就是我得到错误的地方.
var tempNode = document.getElementById(descriptionText);
descriptionText.value = "new text";
Run Code Online (Sandbox Code Playgroud)
这是不行的.我已尝试变量,如文本节点用tagName,数据等命名,我得到相同的错误.那么,是不是可以命名和检索文本节点?还有下一个创建新文本节点并替换旧文本节点的最佳解决方案?
我想用 Jsoup 解析它(这是一个简化,我将解析整个网页)
<html><body><p>A<strong>B</strong>C<strong>D</strong>E</p></body></html>
Run Code Online (Sandbox Code Playgroud)
要按出现的顺序获取所有文本元素,请执行以下操作:
A B C D E
Run Code Online (Sandbox Code Playgroud)
我尝试了两种方法:
Elements elements = doc.children().select("*");
for (Element el : elements)
System.out.println(el.ownText());
Run Code Online (Sandbox Code Playgroud)
返回:
A C E B D
Run Code Online (Sandbox Code Playgroud)
也就是说,“强”标签之间的元素位于末尾。
我还尝试过递归版本:
myfunction(doc.children());
private void myfunction(Elements elements) {
for (Element el : elements){
List<Node> nodos = el.childNodes();
for (Node nodo : nodos) {
if (nodo instanceof TextNode && !((TextNode) nodo).isBlank()) {
System.out.println(((TextNode) nodo).text());
}
}
myfunction(el.children());
}
Run Code Online (Sandbox Code Playgroud)
但结果还是和以前一样。
如何才能做到这一点?我觉得我正在把简单的事情变得困难......