请问 jq 这个功能用原生 js 怎么写最简洁?

2021-10-06 01:47:31 +08:00
 uqf0663
查了半天资料没什么头绪,请问各位大佬有没有比较简洁的写法?

$("div:contains('测试')")
1552 次点击
所在节点    问与答
6 条回复
ysc3839
2021-10-06 05:59:31 +08:00
xiangyuecn
2021-10-06 15:50:49 +08:00
哟呵 写 bug 呢。这种功能从本质上来讲,确实 完全 没有 要进行支持的必要性。
autoxbc
2021-10-06 17:27:52 +08:00
#1 给的并不对题,这里需要的是文字内容检测选择器,而不是节点包含检测函数

原生 CSS 并没有文字内容选择器,所以不能直接使用,只能先选元素,再进行文字内容检测
[...document.querySelectorAll('div')].filter( e => e.textContent.includes('测试') )

如果了解 XPath 语法,也可以用 XPath 表达式检测文字,理论上性能更好
ysc3839
2021-10-06 18:44:22 +08:00
@autoxbc 但是那就是 jQuery 实现 :contains() 的代码。
还是说是我搞错了,实际上实现 :contains() 的代码不是这个?
ysc3839
2021-10-06 18:53:09 +08:00
@autoxbc 抱歉,我确认了一下,确实不是选择器中的实现代码。
正确的代码应该是这段
https://github.com/jquery/jquery/blob/de5398a6ad088dc006b46c6a870a2a053f4cd663/src/selector.js#L858-L863
uqf0663
2021-10-06 22:50:42 +08:00
@xiangyuecn 格局小了啊,看应用场景的,这功能在搞 vue 页面的模拟爬虫的时候非常实用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/806029

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX