如何使用纯javascript选择此文本,没有jquery
How to select this text using pure javascript, no jquery?
我需要使用javascript(没有jquery(选择一些文本,我不知道该怎么做。我需要在第一个子元素之前选择 myClass 元素中的文本("Hello World"(。这里有两个例子,有时它是一个<img>
标签作为第一个元素,有时它是一个<br>
标签。我还需要选择<br>
标签之间的文本。
<p class="myClass" style="padding: 5px;">
Hello World
<img src="http://xyz.com/image.gif">
<br>
30-12-2011 19:45
<br>
Testing
<br>
</p>
<p class="myClass" style="padding: 5px;">
Hello World
<br>
30-12-2011 19:45
<br>
Testing
<br>
</p>
编辑注释:我还需要选择 myClass 中的其他文本节点。请注意,有时会有一个<img>
作为子元素之一,有时不会。
所以我想结束
var a = 'Hello World'
var b = '30-12-2011 19:45'
var c = 'Testing'
有人能做到这一点吗?
不太确定你想要什么。如果要获取所有文本,请使用:
var text = element.innerText || element.textContent;
如果要分几个部分获取文本,则必须遍历所有子节点并提取文本节点:
var texts = [],
children = element.childNodes;
for(var i = 0, len = children.length; i < len; i++) {
var node = children[i];
if(node.nodeType === 3) {
var text = node.nodeValue.replace(/^'s+|'s+$/g, '');
if(text.length > 0) {
texts.push(text);
}
}
}
但是,这不会连接连续的文本节点,如果您插入新的文本节点或使用 JavaScript 拆分文本节点,则可能会发生这种情况。在这种情况下,您可以执行以下操作:
var texts = [''],
children = element.childNodes,
new_bucket = false,
bucket = 0;
for(var i = 0, len = children.length; i < len; i++) {
var node = children[i];
if(node.nodeType === 1 && new_bucket) {
new_bucket = false;
texts[++bucket] = '';
}
else if(node.nodeType === 3) {
var text = node.nodeValue.replace(/^'s+|'s+$/g, '');
if(text.length > 0) {
new_bucket = true;
texts[bucket] += text
}
}
}
var elem = document.getElementsByClassname("myClass")[0],
txtNode = elem.childNodes[0],
txtNodeValue = txtNode.nodeValue;
console.log(txtNodeValue);
例。
我们按元素的类选择元素([0]
只是告诉它选择匹配集合中的第一个元素(,然后查找它的第一个子节点。在您的情况下,这将是文本节点,因此我们要做的就是从那里获取节点值。
这将获得具有类myClass
的第一个元素和该元素的第一个text node
:
document.getElementsByClassName("myClass")[0].childNodes[0].nodeValue
这是一篇很棒的文章解释。
您很可能还希望trim
字符串以删除空格。您可以添加以下内容以提供修剪功能:
if(typeof String.prototype.trim !== 'function') {
String.prototype.trim = function() {
return this.replace(/^'s+|'s+$/g, '');
}
}
。并按以下方式使用它:
var trimmedString = document.getElementsByClassName("myClass")[0].childNodes[0].nodeValue.trim();
http://jsfiddle.net/kgdnR/1/
var abc = [].filter.call((document.getElementsByClassName("myClass")[0].childNodes), function(node) {
if (node.nodeType === Node.TEXT_NODE && node.nodeValue.trim().length) {
return true;
}
return false;
}).map(function(node) {
return node.nodeValue.trim();
});
var a = abc[0],
b = abc[1],
c = abc[2];
console.log(a, b, c);
可以在IE中工作,但如果你愿意,你也可以使用jQuery。
我不知道您的示例有多规律,但您可以使用文档对象与 DOM 进行交互。
选择 myClass 元素
var elements = document.getElementsByClassName('myClass');
然后取第一个索引,它的子节点和第一个索引,它是一个文本节点
var nodes = elements[0].childNodes;
for (var i = 0; i < nodes.length; i++)
{
var node = nodes[i],
text;
// loop over the nodes and see if its as textnode. Then trim and skip empty strings
if(node.nodeType === 3) {
text = node.textContent.trim();
if(text) {
alert(text);
}
}
}
首先,您可以使用
document.getElementsByClassName('test')
以使用类名选择元素。选择所需的元素(它返回一个数组(,然后使用 节点值这将返回文本。
使用 XPath 表达式:
var contextNode = document.body;
var node, textNodes = [];
var search = document.evaluate('.//text()', contextNode, null, XPathResult.ANY_TYPE);
while(node = search.iterateNext()) textNodes.push(node);
按照 OP 的要求选择文本:
var my_class = document.getElementsByClassName('myClass')[0];
window.getSelection().selectAllChildren(my_class);
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- 为什么单选按钮的文本没有出现
- 删除总是与innerHTML不同的文本(没有Jquery)
- 文本没有所有后代节点的 JS 内容
- 搜索字段文本没有't在FF 3.6中显示
- 文本没有显示在背景图像上
- 我的文本没有添加到Angular js中的列表项中
- 来自knockout.js视图模型的文本没有显示在html中
- ctx.填充文本没有显示任何内容
- 正文HTML中的文本没有被正确替换
- 为什么文本没有出现在svg矩形中?
- 为什么按后退键时输入的文本没有被删除
- 更新& lt; a>文本没有任何延迟
- Jquery克隆只有文本没有属性不工作
- 文本没有显示在谷歌地图标记上的标签上
- iFrame文本没有显示在Firefox上,但在Chrome上工作(document.body.innerHTML)
- d3文本没有't随节点移动
- 当我使用 jQuery 从“追加”添加文本时,文本没有显示
- 使用jQuery时文本没有按预期更新
- 为什么我的带有html标签的文本没有'当我使用javascript时,它不会正确显示