猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
如何使用jQuery选择文本节点?
如何使用jQuery选择文本节点?
我想得到一个元素的所有后代文本节点,作为jQuery集合。最好的方法是什么?
杨__羊羊
浏览 1685
回答 4
4回答
湖上湖
jQuery没有这方面的便利功能。您需要组合contents(),它将只提供子节点但包含文本节点find(),它提供所有后代元素但不提供文本节点。这是我想出的:var getTextNodesIn = function(el) { return $(el).find(":not(iframe)").addBack().contents().filter(function() { return this.nodeType == 3; });};getTextNodesIn(el);注意:如果您使用的是jQuery 1.7或更早版本,则上述代码将无效。为了解决这个问题,更换addBack()用andSelf()。andSelf()不赞成addBack()从1.8开始。与纯DOM方法相比,这有点低效,并且必须包含一个丑陋的解决方法,用于jQuery的contents()函数重载(感谢注释中的@rabidsnail指出),所以这里是使用简单递归函数的非jQuery解决方案。该includeWhitespaceNodes参数控制是否在输出中包含空白文本节点(在jQuery中它们被自动过滤掉)。更新:修复includeWhitespaceNodes为假时的错误。function getTextNodesIn(node, includeWhitespaceNodes) { var textNodes = [], nonWhitespaceMatcher = /\S/; function getTextNodes(node) { if (node.nodeType == 3) { if (includeWhitespaceNodes || nonWhitespaceMatcher.test(node.nodeValue)) { textNodes.push(node); } } else { for (var i = 0, len = node.childNodes.length; i < len; ++i) { getTextNodes(node.childNodes[i]); } } } getTextNodes(node); return textNodes;}getTextNodesIn(el);
0
0
0
尚方宝剑之说
Jauco在评论中发布了一个很好的解决方案,所以我在这里复制它:$(elem) .contents() .filter(function() { return this.nodeType === 3; //Node.TEXT_NODE });
0
0
0
宝慕林4294392
$('body').find('*').contents().filter(function () { return this.nodeType === 3; });
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
JavaScript
JQuery
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续