有人可以向我解释为什么.next()在我的预期中不起作用:
HTML结构
<p>
<ol>
<li><a href="#q1">Question 1 Link</a></li>
<li><a href="#q2">Question 2 Link</a></li>
</ol>
</p>
<p>
<a name = "q1"></a><div>Question 1... <br /> Answer 1...</div>
<a name = "q2"></a><div>Question 2... <br /> Answer 2...</div>
</p>
Jquery(目的是突出显示与点击的链接相关的问题+答案div)
$(function() {
$('a').click(function(){
href = $(this).attr('href').split('#')[1];
target = $('a[name="'+href+'"]').next('div');
// For simplicity in the example, I will simply highlight in red.
target.css('background-color', 'red');
});
});
然而这不起作用。如果我在代码中放置console.log(target.html())
,我会发现它返回null
。
有关如何找到<div>
之后立即显示的<a name="..."></a>
的任何建议。
答案 0 :(得分:4)
这不是您问题的直接答案。但是,您可以为div
提供相应的ID:
<div id="q1">Question 1... <br /> Answer 1...</div>
<div id="q2">Question 2... <br /> Answer 2...</div>
的JavaScript
$('a').click(function(){
$(this.href).css('background-color', 'red');
});
元素上的ID与命名锚点的作用相同。
您的jQuery代码本身看起来是正确的(也与HTML有关)。但我怀疑浏览器正在以某种方式更正生成的DOM,因为div
元素中不允许(afaik)p
元素。
更新:似乎我是正确的(或多或少),at least Chrome produces this(检查DOM):
<p>
<a name="q1"></a>
</p>
<div>Question 1... <br> Answer 1...</div>
<a name="q2"></a>
<div>Question 2... <br> Answer 2...</div>
<p></p>
您可以看到第一个a
元素没有下一个兄弟。它应该适用于第二个。
答案 1 :(得分:0)
我需要一个不涉及锚点和解决方案的解决方案。 IDS。
这个插件会在整个DOM中查找下一个出现的内容,而不仅仅是兄弟姐妹 - 我认为这是您最初预期的方式。
换句话说,如果您正在查看标记,那么您看到的下一个标记与选择器匹配的是什么:
(function($){
$.fn.subsequent = function(selector) {
var subsequent = $();
this.parents().andSelf().each(function() {
$(this).nextAll().each(function(){
//check self
subsequent = $(this).filter(selector);
if(subsequent.length > 0) return false;
//check kids
subsequent = $(this).children(selector);
return subsequent.length == 0;
});
return subsequent.length == 0;
});
return subsequent.first();
};
})(jQuery);
这仅选择第一个出现次数。您可能希望制作subsequentAll
版本以匹配所有后续事件。