HTML
<h2 class="tm section-title margin-l-10">Normal Cards<button class="tm bg-dark btn-tiny margin-b-10 float-r js-show-code">show code</button></h2>
<div class="grid-100">
<code>
<div class="<span class="tm bg-win blue">tm card</span>">
<span class="tm lightyellow">...</span>
</div>
</code>
</div>
JAVASCRIPT( jQuery )
$('.js-show-code').click(function(){
$(this).closest('code').slideToggle()
});
我还在学习Javascript和Jquery,我不知道我做错了什么。我无法选择<code>
它始终返回:[prevObject: r.fn.init[1]]
答案 0 :(得分:2)
.closest
用于查找相应closest
的{{1}}个父级。您的按钮包含在element
元素内,而h2
将closest
包含button
,因此导航方向与h2
相反。您对parents
的工作原理有错误的理解。您需要做的是,使用.closest
导航至h2
,并按照目前closest('h2')
获取其next
元素和find
必需code
元素你有自己的结构。以下是DOM
。
snippet
&#13;
$('.js-show-code').click(function() {
$(this).closest('h2').next().slideToggle()
});
&#13;
答案 1 :(得分:2)
closest()
通过测试元素本身并遍历DOM树中的祖先来获取与选择器匹配的第一个元素。您正在寻找与button.js-show-code
无关的元素。
尝试
$('.js-show-code').click(function(){
$(this).closest('h2').next(".grid-100").find("code").slideToggle()
});
以下是fiddle
答案 2 :(得分:0)
.closest()在dom中向上遍历,因此它永远不会到达代码元素。如果必须使用$(this)来查找代码元素,则可以执行以下操作:
$('.js-show-code').click(function(){
$(this).parent().siblings().find('code').slideToggle();
});
或者这样做(将整个事物包装在一个容器中):
<div class="container">
<h2 class="tm section-title margin-l-10">Normal Cards
<button class="tm bg-dark btn-tiny margin-b-10 float-r js-show-code">show code
</button>
</h2>
<div class="grid-100">
<code>
<span class="tm bg-win blue">tmcard</span>
<span class="tm lightyellow">...</span>
</code>
</div>
</div>
$('.js-show-code').click(function(){
$(this).closest('container').find('code').slideToggle();
});