文本节点的 jQuery 自定义选择器

2024-01-12

我想使用 jQuery 自定义选择器从 DOM 元素中提取文本。它应该只选择没有标记同级的文本节点(很像 XPath 中的 /text())。

背景:我正在开发一个 Firefox 扩展,它可以在非常不同的网站上提取一些特定信息(例如用户名)。现在我希望我的用户能够通过尽可能简单的表单动态添加新网站的路径定义:

添加新网站:

URL: ________________(例如“http://stackoverflow.com/questions/”)

Path: ________________(例如“.user-details>a:eq(0)”代表提问用户的姓名)

例如,在 stackoverflow 上,$(path).text() 将以文本形式返回用户名。但在其他一些网站上,用户名只能作为带有标记同级的文本节点使用,如下例所示:

<div id="person">
    johndoe <span id="age">(57)</span>
    <span id="description">Lorem ipsum dolor sit amet…</span>
</div>

由于 jQuery 不提供文本节点选择器(如 XPath 中的 /text()),我希望找到创建自定义选择器的解决方案。

我知道如何以“非选择器”方式获取文本节点:

var textNode = $('#person').contents().filter(function(){
    return this.nodeType == 3;
}).text();

alert(textNode); // gives me "johndoe"

我如何将其转换为自定义选择器?以下显然不起作用,因为只要元素的一部分是文本节点,它总是返回完整的元素(正如 @VinayC 在他的回答中解释的那样):

$.extend($.expr[':'],{
    getText: function(element){
        return $(element).contents().filter(function() {return this.nodeType == 3;}).text();
    }
});

alert($('#person:getText')); //returns the whole DIV element

See my jsfiddle http://jsfiddle.net/vJJbs/

也许无法使用 jQuery 自定义选择器来做到这一点。这就是为什么我正在考虑“回到”XPath,因为它看起来更加通用。

感谢您的帮助。


您正在做的是创建一个 jquery 选择器,选择器函数应该返回布尔值以指示传递的节点是否匹配。因此,您当前的函数为“#person”div 返回“true”((实际返回值是 div 中的文本,它非空,因此被视为 true),因此您将得到 div 元素作为结果。

你可以尝试getText: function(node){ return node.nodeType == 3;}但这仅适用于 jquery 引擎通过选择器函数传递所有文档节点,包括文本节点(我不知道它是否有效)。另一种方法是创建一个辅助函数而不是自定义选择器。

编辑:扩展 jquery 对象怎么样?例如,

$.fn.extend({
    getText: function() {
        return this.contents().filter(function() {return this.nodeType == 3;}).text();
    }
});

alert($('#person').getText());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文本节点的 jQuery 自定义选择器 的相关文章

随机推荐

  • 有没有办法运行 cypress open 并且只包含包含关键字的测试文件?例如。来自domains-lifecycle.spec.jsx的生命周期

    我的项目中有一个相当大的测试文件库 大约 80 个 并且我用关键字 ex 命名它们 创建 编辑 和 生命周期 我希望能够跑步npx cypress open并且仅包含所有包含 生命周期 的测试文件 我可以在 Cypress json glo
  • 谷歌地图 API 未在精确位置放置标记

    我的代码应该找出用户位置并在进入应用程序时在地图上放置一个标记 我的位置值始终等于 null 并且从未收到值 if location null lat int location getLatitude 1E6 longi int locat
  • github graphql api,“clientMutationId”是什么意思?

    I saw clientMutationId领域在示例强类型 https developer github com v4 guides migrating from rest example strong typing文档 mutation
  • C# 从不同线程调用控制

    我正在开发一个使用多线程的服务器程序 问题是 有多个类和大量线程 它们都需要访问某个 TextBox tb日志 该方法 Log 如下所示 using System using System Windows Forms using Syste
  • 如何在nodejs中的axios POST请求中传递文本/纯内容

    I want to pass body parameters as shown in screen shot in text plain format 我在我的 nodejs express 项目中使用 axios 我的请求格式如下图 va
  • 其元素形成连续序列的最长子数组

    给定一个未排序的正整数数组 找到排序时元素连续的最长子数组的长度 你能想到一个 O n 的解决方案吗 Example 10 5 3 1 4 2 8 7 答案是 5 4 5 1 5 7 6 8 4 1 答案是 5 对于第一个例子 子数组 5
  • Spark 物理计划与 Spark Web UI sql 选项卡中显示为 DAG 的计划有何区别?

    我曾经认为 Spark 物理计划和 Spark Web UI SQL 选项卡中显示为 DAG 的两者应该完全相同 只是 SQL 选项卡中的 DAG 将填充实际运行时的统计信息 因此 Web UI 中 SQL 选项卡的内容甚至仅在调用操作后才
  • “x = x || 0”的目的是什么? [复制]

    这个问题在这里已经有答案了 在查看我在网上找到的一些代码时 我发现了这一行特殊的代码 Javascript function values b this b b 0 我根本不明白这样做的目的是什么 0 如果我没记错的话 自从 返回一个布尔值
  • HTML5/Canvas:网页预览?

    我可以使用canvas生成网页的缩略图吗 我有一个网页 用户在网页上停留的时间越长 通过 Ajax 网页的垂直长度就会增加 从而要求用户垂直滚动才能看到页面上的新内容 想想像聊天室这样的东西 我想做的是生成浏览器窗口中所有内容的小缩略图并将
  • 部署到 Azure 失败,需要调试帮助

    我有一个 asp net mvc 4 应用程序 我正在将其部署到 Azure 它部署成功 但是当我从 NuGet Postal 0 8 2 添加包时 它破坏了我的部署 我需要帮助找出问题所在 以便我可以向项目报告问题 当我使用该包部署应用程
  • C++ 中的 popen 等效项

    他们有C吗popen C 中的等价物 您可以使用 尚未正式 升压过程 http www highscore de boost process 如果您想要一种面向对象的方法来管理子流程 或者你可以只使用popen本身 如果你不介意这一切的 C
  • 使用 ggplot2 绘制时间序列图

    我有一个实验 研究了随着时间的推移 三种不断进化的酵母菌群 在离散时间点 我们测量了它们的增长 这是响应变量 我基本上想将酵母的生长绘制为时间序列 使用箱线图来总结每个点的测量结果 并分别绘制三个群体中的每一个 基本上 看起来像这样 作为新
  • H2内存数据库初始化数据

    我将 H2 与 Hibernate 结合使用来动态生成内存数据库以进行单元测试 我成功创建了数据库 一切正常 但我有一个问题我不知道如何处理 我需要在执行测试之前将参考数据加载到数据库进行测试 我将此数据存储为 SQL 插入文件 我只需要在
  • 如何在 Firebase 事件分析中查看捆绑包参数

    我有一个独特的按钮 位于 4 个不同的片段中 这些独特的按钮在所有这些片段中执行类似的操作 但进行了一些调整 由于所有这些事情都很相似 我将它们记录在事件名称 unique btn click event 下 val eventName u
  • 针对 Azure 移动服务和 Javascript 客户端启用 SIignalR 身份验证

    我花了很长时间试图弄清楚如何在使用 JavaScript 客户端时通过 SignalR 进行 AMS 身份验证 我下载了 Azure 移动服务的 JavaScript 客户端 我在 AMS 上安装了 Signal R 一切都已连接并准备就绪
  • SQL 查询中 SELECT 语句中的WITH TIES 关键字有什么用?

    SELECT TOP 5 WITH TIES EmpNumber EmpName FROM Employee Order By EmpNumber DESC 上面的查询返回五个以上的结果 With Ties 关键字 SQL 查询有什么用 F
  • IIS Express 是否支持 ASP Classic?

    我忘记在我的最后一个开发机器 repave 中安装 IIS 并想也许新的 IIS Express 可以满足运行我支持的旧 ASP Classic 站点的要求 您知道 IIS Express 是否支持 ASP Classic 是的 它支持 更
  • 如何增加 MySQL 5.1 中的密钥长度?

    当运行创建索引的 Rails 迁移时 我得到 Mysql Error Specified key was too long max key length is 1000 bytes CREATE UNIQUE INDEX index mat
  • 使用find初始化常量?

    像这样的事情 类别类别 SOME CATEGORY find by name some category end 类别 SOME CATEGORY尝试过没有问题 但想知道这是否是一个坏主意 以及原因 如果有 thanks 如果您不想每次都访
  • 文本节点的 jQuery 自定义选择器

    我想使用 jQuery 自定义选择器从 DOM 元素中提取文本 它应该只选择没有标记同级的文本节点 很像 XPath 中的 text 背景 我正在开发一个 Firefox 扩展 它可以在非常不同的网站上提取一些特定信息 例如用户名 现在我希