1

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

HTML:

<a href="#"><b> two</b> this not bold <b>This</b> is a bold Link</a>

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

var selector = "a:contains('<b> two</b> this not bold <b>This</b> is a bold Link')";

var returnObj = $(selector);

jQuery 没有返回一个对象(链接),而是返回三个对象:

  1. 第一个粗体元素
  2. 文本this is not bold
  3. 第二个粗体元素

问题不在于 中的单引号contains(),因为我尝试过使用和不使用它们。

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

根据这些页面,我的语法似乎正确:
http ://docs.jquery.com/Tutorials:How_to_Get_Anything_You_Want_2
http://api.jquery.com/contains-selector/

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

希望这不是一个太愚蠢的问题,我是 JS 和 jQuery 的新手。

4

2 回答 2

0

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

最重要的是:contains仅适用于文本..所以你应该检查

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

不过,这是一种非常低效的方法,您最好为要定位的元素添加一个类,并将其用于定位..

于 2012-12-11T00:53:19.010 回答
0

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

如果您必须a根据该文本匹配元素,请去掉<b>标签:

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

否则,看看您是否可以通过使用上下文选择器来简化此选择(例如,基于其周围元素、父母、兄弟姐妹等进行选择),或者为其分配一个类并由该类选择。

附带说明一下,我认为这是另一个 jQuery 错误(可能是Sizzle中的解析错误)。在您的情况下,:contains()不应该返回或创建任何元素;它应该不返回任何匹配项,因为选择器与您的a元素不匹配。我怀疑它正在做的是将<b></b>标签视为新元素,并与您的a元素一起动态创建它们,这是错误的,因为标签位于参数字符串内并且意味着按字面意思理解......

于 2012-12-11T00:58:37.827 回答