这是一个DOM片段。
<p class="target">1</ p>
<p class="click"></ p>
<table>
<tr><td><p class="click"></p></td></tr>
</table>
<p class="target">2</p>
我想用target
类找到下一个p,用click
类按下的p在哪个DOM级别上无关紧要。在p值为2的情况下
类似
$ ("p.click").click(function () {
target = $(this).following("p.target").first()
});
但是我找不到如何在DOM中遍历以下轴,除了xpath可能不适用于所有浏览器。
如果我什么都不知道,那将是很好的:)
编辑
我写这个问题不够正确。下面是更合适的代码。按下click
之后,我想获得之后的第一个error
<input class="click" type="button" value="1">
<p class="error"></ p>
<table>
<tr><td><input class="click" type="button" value="2"></td></tr>
</table>
<p class="error"></p>
答案 0 :(得分:1)
通过最初检索所有p
,您可以检查集合中单击元素(.index
)的this
。然后,访问该index + 1
集合中的p
:
const $ps = $('p');
$("p.click").click(function() {
const thisPIndex = $ps.index(this);
console.log($($ps[thisPIndex + 1]).text());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p class="target">1</ p>
<p class="click"></ p>
<table>
<tr>
<td>
<p class="click">click</p>
</td>
</tr>
</table>
<p class="target">2</p>
如果clicked元素不一定是您关注的索引集中的<p>
之一,则可以按照类似的方法,通过在列表中构造 all 元素的集合HTML,在集合中找到被单击元素的索引,从该index + 1
开始构建一个新集合,以filter
p
开头,并检查第一个匹配元素:
const $ps = $('p');
const allElms = $('*');
$(".click").click(function() {
const thisElmIndex = allElms.index(this);
const followingElements = allElms.slice(thisElmIndex + 1);
console.log(followingElements.filter('p')[0].textContent);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input class="click" type="button" value="1">
<p class="error">1</p>
<table>
<tr>
<td><input class="click" type="button" value="2"></td>
</tr>
</table>
<p class="error">2</p>
答案 1 :(得分:1)
.index()
和.eq()
假设每个.error
有一个.click
,我们可以:
.click
.click
相关的点击的.click
索引号.error
中查找等效的索引号。
演示中评论的详细信息
/*
- Register click event on document
- Any .click clicked will be $(this)
- Get the index number of the clicked button in relation to
all .click on the document.
- Use the same index number to find the associated .error
*/
$(document).on('click', '.click', function(e) {
var idx = $(this).index('.click');
$('.error').eq(idx).show();
});
.error {
display: none
}
<input class="click" type="button" value="1">
<p class="error">ERROR 1</ p>
<table>
<tr>
<td><input class="click" type="button" value="2"></td>
</tr>
</table>
<p class="error">ERROR 2</p>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
答案 2 :(得分:0)