17

我可以用 jQuery 选择#id > #id 吗?

我有这个结构

<div id="slide1">
    <div id="slide_body">
    some content
    </div>
</div>

<div id="slide2">
    <div id="slide_body">
    some content
    </div>
</div>

有没有办法使用 jquery 只选择 #slide1 中的 #slide_body ?

或者是将id附加到每个body div的唯一解决方案,例如

<div id="slide2">
    <div id="slide_2_slide_body">
    some content
    </div>
</div>
4

9 回答 9

13

第一个问题的答案:

我可以用 jQuery 选择#id > #id 吗?

您实际上可以执行该确切的语法$('#slide1 > #slidebody')。该>字符表示直接后代,称为子选择器 ( http://api.jquery.com/child-selector/ )。如果元素可能不是直接后代而是嵌套在其他东西中,则可以省略>and 以 . 结尾$('#slide1 #slidebody')

至于 HTML 片段,大多数都正确地提到了在不同元素上具有相同的 id 并被视为无效文档是不好的。

http://jsfiddle.net/infiniteloops/LzFAr/

于 2013-01-23T10:58:24.677 回答
11

您不能在一个文档中使用唯一 ID

此属性为元素分配名称。此名称在文档中必须是唯一的。

http://www.w3.org/TR/html401/struct/global.html#h-7.5.2

在您的示例中,您可以使用类“slide_body”

<div id="slide1">
    <div class="slide_body">
    some content
    </div>
</div>

然后你可以用#slide1 .slide_bodyor选择它$("#slide1").find('.slide_body')

于 2013-01-23T10:51:15.740 回答
6

采用

$('#slide1 > #slide_body')
于 2013-01-23T11:04:55.863 回答
3

您的标记无效。不能有两个具有相同 ID 的元素。出于这个原因,答案是否定的。改用类。

<div id="slide1">
    <div class="slide_body">
    some content
    </div>
</div>

<div id="slide2">
    <div class="slide_body">
    some content
    </div>
</div>

$('#slide2>.slide_body');
于 2013-01-23T10:52:05.410 回答
2

同样的事情发生在我身上,我正在寻找解决方案,事实是这里发布的没有一个对我有用,我找到了对我有用的东西 ($('#container').find('#child' )):

var div = $('#container').find('#child4').html();
alert(div);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
  Container:
  <div id="child1">Child Div 1</div>
  <div id="child2">Child Div 2</div>
  <div id="child3">Child Div 3</div>
  <div id="child4">Child Div 4</div>
  <div id="child5">Child Div 5</div>
</div>

于 2017-12-11T23:29:10.800 回答
0

ID 在页面上应该是唯一的。改用类:

<div id="slide1">
    <div class="slide_body">
        some content
    </div>
</div>

然后#slide1 .slide_body作为选择器。

于 2013-01-23T10:51:52.743 回答
0

HTML 元素的 id 应该是唯一的。将幻灯片体变成一个类。

HTML

<div id="slide1">
    <div class="slide_body">
    some content
    </div>
</div>

<div id="slide2">
    <div class="slide_body">
    some content
    </div>
</div>

选择器

$("#slide1 .slide_body")
于 2013-01-23T10:52:01.050 回答
0

您可以这样选择,但是它完全是多余的,因为id属性在页面中应该是唯一的。考虑到这一点,您当前的代码无效。您应该class在需要对标识符进行分组的地方使用:

<div id="slide1">
    <div class="slide_body">
        some content
    </div>
</div>

<div id="slide2">
    <div class="slide_body">
        some content
    </div>
</div>

然后,您将使用:

var $slideContent = $('#slide1 .slide_body');
于 2013-01-23T10:52:19.587 回答
0

首先,拥有非唯一 ID 并不是一个很好的决定。尽管如此,您可以在 jQuery 函数中传递上下文:

$("#slide_body", "#slide1")

于 2013-01-23T10:53:06.500 回答