JQuery доступ дочерний текущий родительский
Я новичок в jQuery и пытаюсь сделать следующее: получить доступ к дочернему элементу родительского элемента текущего div (или, другими словами: другому дочернему элементу родительского элемента текущего div). Мой код выглядит так (вот что я пробовал):
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$("div.head").click(function() {
$(this).parent().("div.content").slideToggle("normal"); //<- how?
});
});
</script>
<div class="box">
<div class="head">
Example
</div>
<div class="content">
Content here.
</div>
</div>
Я пытаюсь сделать это таким образом, потому что тогда я мог бы просто сделать больше блоков таким же образом, не добавляя дополнительные js, чтобы он работал для каждого блока (переключатель скрытия / показа содержимого каждого блока).
6 ответов
Если два элемента находятся на одном уровне DOM, то вы можете использовать .siblings()
:
$(function() {
$(".head").click(function() {
$(this).siblings(".content").slideToggle("normal");
});
});
Вот демо: http://jsfiddle.net/L5kqs/1/
Вашему селектору нужна была .children()
или .find()
:
$(this).parent().children(".content").slideToggle("normal");
Также обратите внимание, что ваши селекторы будут работать быстрее, если вы опустите имена тегов. Только когда будет много узлов DOM для поиска, это улучшит производительность.
Если вы хотите узнать больше о .siblings()
это было бы хорошим началом: http://api.jquery.com/siblings
<script>
$(document).ready(function() {
$("div.head").click(function() {
$(this).next("div.content").slideToggle("normal"); //<- easy
});
});
</script>
Если все, что вас интересует, это элемент сразу после этого, используйте решение Happytime Harry, которое использует .next()
т.е.
$(this).next(".content").slideToggle("normal");
Если вы ищете что-то более общее, используйте одно из следующего:
// Search for elements which are direct children of parent
$(this).parent().children(".content").slideToggle("normal");
// Search for siblings (same as above, but will not include $(this))
$(this).siblings(".content").slideToggle("normal");
// Search within all descendents of parent
$(this).parent().find(".content").slideToggle("normal");
Ты можешь попробовать
$(document).ready(function() {
$("div.head").click(function() {
$(this).parent().find(".content").slideToggle("normal"); //<- how?
});
});
или использовать братьев и сестер
$(this).siblings(".content").slideToggle("normal");
Ты можешь использовать .find
.children
чтобы получить div.content
:
$(document).ready(function() {
$("div.head").click(function() {
$(this).parent().children("div.content").slideToggle("normal");
});
});
Или вы можете использовать .siblings
:
$(document).ready(function() {
$("div.head").click(function() {
$(this).siblings("div.content").slideToggle("normal");
});
});
Что -то вроде этого должно быть достаточно
$(".head").bind("click", function(){
$(this).parent().find(".content").slideToggle("normal");
})