jQuery选择器:选择特定id的div的后代锚点标签

3

尝试选择锚点标签,这些标签是特定id的div的后代,比如说#mydiv1#mydiv2#mydiv3

myFunction = function() {    
  var theDivs = $("#mydiv1, #mydiv2, #mydiv3");    
  theDivs.hover(function(e){    
      $(this+" a:link").css("color","#99ccff");
  },function(e){
      $(this+" a:link").css("color","#848484");        
  });    
}

选择器$(this+" a:link")似乎没有选择任何内容。
你有没有对这个选择的正确语法有什么想法?

所以你想要的是改变链接的颜色类吗? - TStamper
5个回答

10

尝试使用$(this).find("a:link")

编辑:额外信息

当你使用$(this + "query")时,你在混合类型。jQuery的选择器参数要求查询字符串或对象。当'this'被转换为字符串时,它不会成为有效的选择器语法。例如,你可以像这样做:$("." + this.className + "[query]")


7
您可以为上下文提供一个元素,以下内容应该可以正常工作:

您可以为上下文提供一个元素,以下内容应该可以正常工作:

$("a:link", this).

它将搜索以此节点开头的锚点。

2
是的,这可能更好。 :) - Paul
在内部,提供上下文只是在一段case检查代码之后调用find(),这意味着直接调用find()会(稍微)更快。 - Ben Blank
但是使用“少写,多做”的哲学,我更喜欢这个答案而不是我的第一个答案。虽然我认为使用find函数可以更清楚地指出OP的问题所在。 - Paul
我不是100%确定,但我认为如果您执行$(this).find(),jQuery 需要先围绕此构建包装器,因此您将失去直接调用find()的速度优势。 - Miquel

1

0
使用.each()迭代具有类名为div的元素,并使用子选择器:
  myFunction = function() {    
      var theDivs = $("#mydiv1, #mydiv2, #mydiv3");    
  theDivs.each(function(){    
      $(this > 'a').css("color","#99ccff");
  });    
}

就像这样。


0

以上两种方法都应该可以工作,但我在jQuery选择器语法中没有看到“:link”是有效的语法。如果上述方法对您不起作用,请尝试将其省略。

而您原来的方法之所以不起作用,是因为“this”是一个DOM元素,而不是您代码中的字符串。如前所述,您可以通过执行“$(this)”使其成为jQuery对象,或者只使用DOM元素作为搜索上下文。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接