通过jQuery访问DOM元素
accessing DOM elements by jQuery
假设我的代码中有以下 DOM 元素:
<div id="test">
<div id="t2">
Hi I am
<b>Gopi</b>
and am 20 years old.
<p id="div2">
<button onclick="alert('lol')">Check</button>
</p>
</div>
</div>
假设我想遍历div#t2 的内容。
$("#t2").children()
给了我<b>
和<p>
标签。
那么我应该如何访问它以获取包含" Hi I am
","<b>....</b>
","and am 20 years old.
","<p>.....</p>
"的数组的值 ?
使用本机 DOM 节点:
$('#t2')[0].childNodes
为您提供所需的数组。
在使用 $.trim 之前,您可能也希望修剪条目,因为实际的文本节点包含 HTML 中的所有空格。
您可以使用
.get()
方法获取它
var arr = $("#t2").contents().get();
工作小提琴
如果你检查小提琴,你会发现.contents()
返回一个数组,包括
text
和html
元素,如
[text1,html1,text2,html2,text3]
//Where
text1 == Hi I am
html1 == <b>Gopi</b>
text2 == and am 20 years old.
html2 == <p id="div2"><button onclick="alert('lol')">Check</button></p>
这完全有道理,但最后text3
从何而来。
标记末尾还有另一个文本节点<p>
<p id="div2">....</p> <-- Here, newline is
another text node(the last one)
因此,如果您使用.contents
请记住这一点。
要获取修剪后的数据,请使用 $.map,例如
var arr = $("#t2").contents().map(function(){
if (this.nodeType == 3)
return $.trim(this.nodeValue) || null;
// this null to omit last textnode
else
return $('<div />').append(this).html();
});
var result = [];
$("#t2").contents().map(function(index, el) {
console.log(el);
if(el.nodeType == 3) {
result.push($.trim( $(el).text() ));
} else {
if(el.tagName.toLowerCase() == 'b') {
result.push('<b>' + el.innerHTML + '</b>');
} else if(el.tagName.toLowerCase() == 'p') {
result.push('<p>' + el.innerHTML + '</p>');
}
}
});
演示
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- DOM元素和angular元素之间的主要区别是什么
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 如何使用JavaScript在没有html dom的情况下隐藏html元素
- 使用jquery创建dom元素会导致ie9出现拒绝访问错误
- 通过AJAX侦听向DOM添加某些元素
- 如何在使用Ractive.extend()时引用DOM元素
- 在d3中向DOM元素添加了图像,但现在它赢得了't过渡
- Selenium无法在浏览器DOM中定位元素
- 如何'剪切'DOM元素并将其显示在其他位置
- 转换<a>使用jQuery将文本字符串转换为dom元素
- 从dom中删除任何元素后,Touchmove事件停止触发
- d3在数据更新时错误地附加了dom元素
- 访问VueJS中的DOM元素
- 在Meteor中如何查找DOM元素(渲染后)
- 找到元素DOM的根节点(阴影或光)的最佳方法是什么?
- 在querySelector:如何获得第一个和最后一个元素?dom中使用的遍历顺序