2011-04-27 213 views
57

让我们说我有一个类似这样的标记:jQuery的 - 从元素中选择元素

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

,我想选择#moo。

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

+10

为什么不'$( '#哞')'? ;)Btw。它确实工作:http://jsfiddle.net/fkling/k5X2r/ – 2011-04-27 18:15:11

+0

或'$('#foo span')';-) – Capsule 2011-04-27 18:18:41

+0

我不知道为什么,但钩到选定范围的函数会应用到所有跨越页面,而不仅仅是一个里面的#foo :( – Alex 2011-04-27 18:31:01

回答

90

您可以使用任何一个这些

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

Take a look

+1

我认为第三个应该是跨度#moo不是跨度#foo? – xr280xr 2013-07-25 21:51:35

+0

是的。我已经把c orrection – 2013-07-26 04:14:01

34

其实,$( '#身份证',这一点);会在任何后代级别选择#id,而不仅仅是直接子级。试试这个:

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

$("#foo > #moo") 

$("#foo > span") 
+0

不会选择任何东西,因为元素具有** ID **'moo',而不是类。 – 2011-04-27 18:16:34

+0

值得注意的是'.children()'和'。 find()'是相似的,除了前者只在DOM子树中向下移动一个层次。 – Kevin 2016-05-26 03:13:50

8

为什么不直接使用:

$("#foo span") 

$("#foo > span") 

$('span', $('#foo'));作品在我的机器上的罚款;)

+0

'$($(elementA),'tr#'+ key +'span')'不适用于我(jQuery 1.10 .2) – Cody 2014-07-07 16:34:58

6

看看这里[从最快的开始] - 查询元素的子元素

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

1

您可以使用find选项来选择另一个元素。例如,要找到ID txtName的在一个特定的div元素,你可以像使用

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