Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查下一个元素是否有特定的类_Javascript_Jquery - Fatal编程技术网

Javascript 检查下一个元素是否有特定的类

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

html结构:

<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);
  }
});