从 DOM 对象获取单个文本节点
get SINGLE text node from DOM object
需要从DOM元素获取所有直接节点,但实际上并不知道它有多少以及它们是什么类型。 .contents()?
好吧,让我们看看..
$('<div />').html('<p>p</p>').contents()
-> [<p>p</p>]
还行。
$('<div />').html('textNode').contents()
-> []
跆拳道?
$('<div />').html('textNode').append('another').contents()
-> ["textNode", "another"]
好的,那么单个文本节点呢?
我不知道
这是否有帮助。不久前,我使用 JSON 样式的输入构建了一个文档片段生成器。我还为它编写了一个(有点工作)反向函数,以便您可以将nodeList转换为JSON字符串。
https://gist.github.com/2313580
var reverseFunction = function(DOM /* DOM tree or nodeList */) {
var tree = [];[].forEach.call(DOM, function(obj) {
if (obj instanceof Text) {
tree.push({
'textContent': obj.textContent
});
} else {
var tmp = {};
tmp['tagName'] = obj.nodeName;
for( var data in obj.dataset ) {
tmp['data-' + data] = obj.dataset[data];
}
for (var i = 0, l = obj.attributes.length; i < l; i++) {
var key = obj.attributes[i].name,
val;
if (key.indexOf('data-') === -1) {
switch (key) {
case ('class'):
key = 'className';
break;
case ('style'):
val = {};
obj.attributes[i].value.split(';').forEach(function(rule) {
var parts = rule.split(':');
val[parts[0]] = parts[1];
});
break;
};
tmp[key] = val || obj.attributes[i].value;
}
}
if (obj.childNodes.length > 0) {
tmp['childNodes'] = reverseFunction(obj.childNodes);
}
tree.push(tmp);
}
});
return tree;
};
这确实可以找到文本节点并将它们分开...您也许可以从中提取一些东西。
更新:要回答您上面问题中的评论...
var div = document.createElement('div');
div.appendChild(document.createTextNode('dsf'));
console.log( div.childNodes.length, div.childNodes, div.childNodes[0].textContent);
我希望这对你知道更有意义。数组在控制台中显示为空,但事实并非如此。 检查长度并尝试访问它,您将看到。
.content() 与 DOM 节点有关。 第二个示例中的字符串不是 DOM 元素。
相关文章:
- Javascript,将文本添加到具有现有文本节点的元素中
- 拆分文本节点
- 使用TreeWalker检索非Javascript文本节点
- jquery在元素中查找文本节点,并使用标记进行连接和包装
- JavaScript 文本节点属性
- 获取文本节点的宽度
- 如何将由
分隔的文本节点与它们自己的标记包装起来
- 如何返回jQuery对象中的文本节点
- 包装和打开jquery后合并文本节点
- 有没有一种方法可以在javascript中为文本节点添加属性
- 使用文本节点打印段落
- 计算文本节点中的字母数
- 正则表达式:仅在标记中匹配文本节点
- "“错误”;导致故障的文本节点
- 正在创建文本节点
- jQuery,如何测试一个变量是一个文本节点,不包含任何标记
- 使用 casperjs 抓取文本节点的最快方法
- 如何在文本节点中保留空格
- 如何获取文档片段中的所有文本节点
- 选择“相邻同级”而不干预文本节点