Javascript :包含错误选择的子元素

Javascript :包含错误选择的子元素,javascript,jquery,html,jquery-selectors,Javascript,Jquery,Html,Jquery Selectors,目前,我正在尝试使用jQuery:contains选择器选择一个链接元素。当链接的内容仅为文本时,此操作有效。但当元素包含其他HTML元素时:contains选择器似乎会选择一个子元素。范例 HTML: 从html中,我尝试使用此选择器选择链接 jQuery: jQuery不会从链接中获取一个返回的对象,而是返回三个对象: 第一个粗体元素 这篇文章不是粗体的 第二个粗体元素 问题不在于contains中的单引号,我已经尝试过使用它们和不使用它们 这只是我尝试做的一个简单例子。实际上,我正在根据用

目前,我正在尝试使用jQuery:contains选择器选择一个链接元素。当链接的内容仅为文本时,此操作有效。但当元素包含其他HTML元素时:contains选择器似乎会选择一个子元素。范例

HTML:

从html中,我尝试使用此选择器选择链接 jQuery:

jQuery不会从链接中获取一个返回的对象,而是返回三个对象:

第一个粗体元素 这篇文章不是粗体的 第二个粗体元素 问题不在于contains中的单引号,我已经尝试过使用它们和不使用它们

这只是我尝试做的一个简单例子。实际上,我正在根据用户单击的链接对象动态创建选择器。然后,我将该选择器存储在数据库中,以便以后我的应用程序显示与该链接相关的内容。因为我可以获取链接的内容,所以我想如果链接没有id,我就使用:contents

根据这些页面,我似乎有正确的语法:

关于如何返回链接对象的想法?谢谢


希望这不是一个太愚蠢的问题,我对JS和jQuery还不熟悉。

首先,选择器文本与html中的实际文本不匹配。
选择器包括html中不存在的this not bold

最重要的是:包含仅与文本相关的作品。。所以你应该检查一下

$("a:contains('two this not bold This is a bold Link')");
但是,这是一种效率非常低的方法,您最好向要定位的元素添加一个类,并将其用于定位。

如前所述,:contains仅用于按文本内容选择,而不是按内部HTML选择

如果必须基于该文本匹配a元素,请去掉标记:

否则,请查看是否可以使用上下文选择器简化此选择,例如,根据其周围元素、父级、同级等进行选择,或者为其指定一个类,然后改为按该类进行选择


一个旁注,我会考虑这一点,但是另一个jQuery错误可能是一个解析错误。在您的情况下,:contains不应返回或创建任何元素;它应该不返回匹配项,因为选择器与a元素不匹配。我怀疑它所做的是将标记视为新元素,并随a元素一起动态创建它们,这是错误的,因为标记位于参数字符串中,并按字面意思理解…

contains实际上不适用于HTML,它仅适用于文本。:contains只查看文本内容,而不是HTML。然而,奇怪的是a:包含。。。将返回b元素。我本以为jQuery会返回一个空集。嘿,这太奇怪了。啊哈!如果我去掉html并让选择器:a:包含“两个this not bold this a bold Link”,它将按预期工作。有没有可能有人知道如何创建一个具有上述行为的选择器?这在html中是不存在的,这可能是我纠正的问题中的一个错误。不过,它仍然不应该与OP的选择器匹配。谢谢!我知道这个特殊的选择器不是最有效的路线。这是最后的手段,不幸的是,我选择的元素不在我的html中,所以我没有选择添加ID或类,我可以选择。在阅读了一些jQuery之后,这并不是一个真正的bug。。状态为如果字符串作为参数传递给$,jQuery将检查该字符串是否看起来像HTML,即它在字符串中的某个位置。稍后,如果字符串看起来是一个HTML片段,jQuery会尝试创建新的DOM元素,如HTML.@gabykag.Petrioli:Hmmm所述,那么它不会只生成b元素并丢弃a而不是尝试匹配它吗?或者它是将:contains参数解释为自己的字符串并自行计算吗?它仅在创建元素时查找标记。$'text链接其他文本';只会创建一个链接为什么它在不创建链接的情况下会查找链接?@BoltClock,它会丢弃元素a。它只是创建了一个新的b元素。根本不匹配。。整个选择器被视为新的html,因为它包含标记。它们被提取并创建为元素。
var selector = "a:contains('<b> two</b> this not bold <b>This</b> is a bold Link')";

var returnObj = $(selector);
$("a:contains('two this not bold This is a bold Link')");
var selector = "a:contains(' two this not bold This is a bold Link')";