jQuery-从元素内部选择元素


94

假设我有这样的标记:

<div id="foo">
  ...
  <span id="moo">
    ...
  </span>
  ...
</div>

我想选择#moo

为什么$('#foo').find('span')有效,但是$('span', $('#foo'));不有效?


10
为什么不$('#moo')呢?;)顺便说一句。它确实起作用:jsfiddle.net/fkling/k5X2r
Felix Kling

我不知道为什么,但是我挂钩到选定范围的函数将应用于页面中的所有范围,而不仅仅是#foo中的一个:(
Alex

2
怎么样,当您已经在var中选择了元素时,例如,您从var ele = $("div #foo")如何从此处开始moo(不使用数组引用)开始
Worthy7 '16

Answers:


129

您可以使用其中任何一种[从最快的速度开始]

$("#moo") > $("#foo #moo") > $("div#foo span#moo") > $("#foo span") > $("#foo > #moo")

看一看


1
我认为第三个应该是span#moo而不是span#foo?
xr280xr

60

实际上,$('#id',this); 会在任何后代级别选择#id,而不仅仅是直接子级。尝试以下方法:

$(this).children('#id');

要么

$("#foo > #moo")

要么

$("#foo > span")

那不会选择任何东西,因为元素具有ID moo而不是类。
Felix Kling

3
值得一提的是,.children().find()有不同之处在于前者的旅行只有一个级别向下DOM子树相似。
凯文

效果很好,谢谢;-)
阿里·拉希尼

9

为什么不使用:

$("#foo span")

要么

$("#foo > span")

$('span', $('#foo')); 在我的机器上工作正常;)


$($(elementA), 'tr#' + key + ' span')不适用于我(jQuery 1.10.2)
Cody

8

您可以使用findoption选择另一个元素。例如,要在特定div中查找ID为txtName的元素,可以使用like

var name = $('#div1').find('#txtName').val();

6

在这里看看- 查询元素的子元素

$(document.getElementById('parentid')).find('div#' + divID + ' span.child');


3

....但是$('span',$('#foo')); 不起作用?

此方法称为提供选择器上下文

在此,您为jQuery选择器提供了第二个参数。它可以是任何CSS对象字符串,就像您通过直接选择或使用jQuery元素一样。

例如。

$("span",".cont1").css("background", '#F00');

上一行将选择具有名为的类的容器内的所有跨度cont1

演示


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.