我有以下标记
<div id="section1">
<h1>Titel 1</h1>
<p>Some smart Text</p>
</div>
<div id="section2">
<h2>Titel 2</h2>
<p>Some smart Text2</p>
</div>
<div id="section3-1">
<h3>Titel 3-1</h3>
</div>
<div id="section3-1content">
<ul>
<li id="section3-1content-el1">El1</li>
<li id="section3-1content-el2">El2</li>
</ul>
</div>
<div id="section3-2">
<h3>Titel 3-2</h3>
</div>
<div id="section3-2content">
<ul>
<li id="section3-2content-el1">El1</li>
<li id="section3-2content-el2">El2</li>
</ul>
</div>
当我点击#section3-2content-el2时,我想回来
<h3>Titel 3-2</3>
(最近的h3),然后
<h2>Titel 2</h2>
然后
<h1>Titel 1</h1>.
问题在于,h3,h2和h1并非真正来自点击元素的父母。有没有办法在源代码中找回第一个h3,然后是第一个h2,然后是第一个h1?
问题:
$('#section3-2content-el1').click(function(){
$('#section3-2content-el1').parents('h3');
$('#section3-2content-el1').prevAll('h3');
$('#section3-2content-el1').closest('h3');
});
是他们都沿着dom旅行,看看是否是一个h3。但是h3不是被点击元素的父级。
答案 0 :(得分:0)
<强> Demo Fiddle 强>
有很多选择。考虑到你的html结构:last
是最好的选择。查看演示。
$(this).parents('body').find('h3:last')
如果您的标题标记一致,.prev()
将是另一种选择。
答案 1 :(得分:0)
我会通过使用jQuery的.map()
方法来返回一个数组(或者,数组,无论如何)类名。然后,您可以将单击元素的类名称与共享其类名称的标题相匹配。
首先将一些类添加到<h3>
和<li>
s:
<div id="section1">
<h1>Titel 1</h1>
<p>Some smart Text</p>
</div>
<div id="section2">
<h2>Titel 2</h2>
<p>Some smart Text2</p>
</div>
<div id="section3-1">
<h3 class="first">Titel 3-1</h3>
</div>
<div id="section3-1content">
<ul>
<li id="section3-1content-el1" class="first">El1</li>
<li id="section3-1content-el2" class="first">El2</li>
</ul>
</div>
<div id="section3-2">
<h3 class="second">Titel 3-2</h3>
</div>
<div id="section3-2content">
<ul>
<li id="section3-2content-el1" class="second">El1</li>
<li id="section3-2content-el2" class="second">El2</li>
</ul>
</div>
JS / jQuery:
$(document).ready(function(){
$('li').click(function(){
var self = $(this);
// Create an array of class names
var cls = $('h3').map(function(){
return $(this).attr('class');
});
// Loop through the array until the current iteration matches the class name of the clicked element
for (var i = 0; i < cls.length; i++) {
if (self.hasClass(cls[i])) {
// Do stuff based on whether there is a match
alert($('h3.' + cls[i]).attr('class'));
}
}
});
});
FIDDLE:http://jsfiddle.net/KFS4E/