Javascript 检查下一个元素是否有特定的类
html结构:Javascript 检查下一个元素是否有特定的类,javascript,jquery,Javascript,Jquery,html结构: <div class="row"> <div class="span"></div> <div class="span"></div> <div class="navMenu"> <ul> <li><a href=#">Link 1</a></li> <li>&l
<div class="row">
<div class="span"></div>
<div class="span"></div>
<div class="navMenu">
<ul>
<li><a href=#">Link 1</a></li>
<li><a href=#">Link 1</a></li>
</ul>
</div>
</div>
重要的是,带有class的新div。new
是菜单中div容器旁边带有此类类的div。原因是因为我将使用许多不同的.row
div创建许多菜单,所以我希望选择正确的菜单
上面的最后一个代码不起作用,因为您不需要每个循环-您还注意到
。new
和。row
是兄弟吗
$(".navMore li a").on("click", function() {
var $el = $(this);
var $row = $el.closest('.row'); // <-- get to row first
if($row.next('.new').length){ // check next element
$('<div class="span"></div>').appendTo('.new');
}
else {
$('<div class="new"></div>').insertAfter($row);
$('<div class="span"></div>').appendTo('.new');
}
});
$(.navMore li a”)。在(“单击”,函数()上{
var$el=$(本);
变量$row=$el.closest('.row');//
您不需要each循环-您还注意到.new
和.row
是兄弟吗
$(".navMore li a").on("click", function() {
var $el = $(this);
var $row = $el.closest('.row'); // <-- get to row first
if($row.next('.new').length){ // check next element
$('<div class="span"></div>').appendTo('.new');
}
else {
$('<div class="new"></div>').insertAfter($row);
$('<div class="span"></div>').appendTo('.new');
}
});
$(.navMore li a”)。在(“单击”,函数()上{
var$el=$(本);
变量$row=$el.closest('.row');//
$(.navMenu ul li a”)。打开(“单击”,函数(){
if($(this).closest('.row').next('.new').length){
$('').appendTo('.new');
}否则{
$('This a span.')。insertAfter($(This).closest('s row'));
}
});
$(.navMenu ul li a”)。打开(“单击”,功能(){
if($(this).closest('.row').next('.new').length){
$('').appendTo('.new');
}否则{
$('This a span.')。insertAfter($(This).closest('s row'));
}
});
foreach循环是不必要的。您只需将单击事件直接绑定到选择器中的所有项目,而无需在集合中循环并单独绑定它们
我会将click事件绑定到.row
div,因为click事件将冒泡…这将使您的选择器非常容易测试下一个同级是否有.new
类
$('.row').click(function() {
var newDiv = $(this).next();
if(newDiv.hasClass('new')){
$('<div class="span"></div>').appendTo(newDiv);
}
else {
newDiv = $('<div class="new"></div>');
newDiv.insertAfter($(this));
$('<div class="span"></div>').appendTo(newDiv);
}
});
$('.row')。单击(函数(){
var newDiv=$(this.next();
if(newDiv.hasClass('new')){
$('')。附录(新分部);
}
否则{
newDiv=$('');
newDiv.insertAfter($(this));
$('')。附录(新分部);
}
});
编辑:
我之所以选择绑定到.row,是因为DOM关于事件如何向上传播到其父级的部分规则表示,如果有人单击锚定标记,它将向DOM中的父级发送事件。因此,这意味着如果我们正在侦听对标记的父级的单击,它将显示为单击来自该父级父项(在本例中为.row
div)。foreach循环是不必要的。您只需将单击事件直接绑定到选择器中的所有项目,而不必遍历集合并单独绑定它们
我会将click事件绑定到.row
div,因为click事件将冒泡…这将使您的选择器非常容易测试下一个同级是否有.new
类
$('.row').click(function() {
var newDiv = $(this).next();
if(newDiv.hasClass('new')){
$('<div class="span"></div>').appendTo(newDiv);
}
else {
newDiv = $('<div class="new"></div>');
newDiv.insertAfter($(this));
$('<div class="span"></div>').appendTo(newDiv);
}
});
$('.row')。单击(函数(){
var newDiv=$(this.next();
if(newDiv.hasClass('new')){
$('')。附录(新分部);
}
否则{
newDiv=$('');
newDiv.insertAfter($(this));
$('')。附录(新分部);
}
});
编辑:
我之所以选择绑定到.row,是因为DOM关于事件如何向上传播到其父级的部分规则表示,如果有人单击锚定标记,它将向DOM中的父级发送事件。因此,这意味着如果我们正在侦听对标记的父级的单击,它将显示为单击来自该父级父级(在本例中为.row
div)。但这假设我们已经有了一个类为.new的div?我们需要先创建一个,这不是其他的吗?如果下一个元素没有类为new..创建一个吗?对不起..)我们可以添加一个循环吗?我们可以说,如果我们添加了3.span div,那么我们可以插入另一个.new div?但这假设我们已经有一个类为的div。new?我们需要先创建一个。这不是其他元素的用途吗?如果下一个元素没有类new。创建一个吗?对不起:)我们可以添加一个循环吗?我们可以说,如果我们添加了3.span div,那么我们就插入另一个.new div?为什么我们要单击行?是否应该是.row ul li a?我选择绑定到.row的原因是因为DOM规则中关于事件如何传播到其父级的部分规定,如果有人单击锚定标记
然后,它会将事件发送到DOM中的父级。这意味着,如果我们正在侦听对
标记的父级的单击,它将显示为该单击来自该父级。如果您走另一条路线,则绑定到锚标记本身(这是完全有效的),然后您可以使用选择器通过dom向上遍历父div.row
,以检查其下一个同级变得有点混乱(IMO)。这稍微简化了逻辑。但这两种方法都是有效的。为什么我们要单击行?是否应该。行ul li a?我之所以选择绑定到。行,是因为DOM中关于事件如何向其父级传播的部分规则表示,如果有人单击锚定标记,则它将向上发送事件DOM。这意味着,如果我们正在侦听对
标记的父项的单击,它将显示为该单击来自该父项。如果您转到另一条路径,则绑定到锚标记本身(这是完全有效的),然后您可以使用选择器,通过dom向上遍历父div.row
,以检查其下一个同级变得有点混乱(IMO)。这稍微简化了逻辑。但这两种方法都是有效的。
$(".navMore li a") // <-- here
$(".navMenu ul li a").on("click", function () {
if ($(this).closest('.row').next('.new').length) {
$('<div class="span"></div>').appendTo('.new');
} else {
$('<div class="new"><div class="span">This is a span.</div></div>').insertAfter($(this).closest('.row'));
}
});
$('.row').click(function() {
var newDiv = $(this).next();
if(newDiv.hasClass('new')){
$('<div class="span"></div>').appendTo(newDiv);
}
else {
newDiv = $('<div class="new"></div>');
newDiv.insertAfter($(this));
$('<div class="span"></div>').appendTo(newDiv);
}
});