jQuery insertAfter不是函数

时间:2019-06-24 10:01:11

标签: jquery dom element insertafter

我需要为每个元素在外部的Dom元素中插入

$items1 = [];
$.each($('.qs-option-name'), function () {
   if($(this).find('span.highlighted').length === 1){
      $item  = $(this).parent().parent();
      console.log($item);
      $items1.push($item);
   }
 });
 console.log($items1);
 $items1.insertAfter('ul li.first');
每个内部

console.log(): enter image description here

console.log()在每个外部:

enter image description here

不确定再次循环插入数组是否有效,是否有办法一次性插入DOM元素数组?

1 个答案:

答案 0 :(得分:2)

问题是因为$items1是jQuery对象的数组,因此没有insertAfter()方法。

要解决此问题,您可以从数组创建jQuery对象:

$($items1).insertAfter('ul li.first');

或者,您可以使用add()组合jQuery对象,而不用创建基本数组:

var $items1 = $();
$('.qs-option-name').each(function() {
  if ($(this).find('span.highlighted').length === 1) {
    $item = $(this).parent().parent();
    $items1.add($item);
  }
});
$items1.insertAfter('ul li.first');

不过,您可以使用:has()map()使逻辑更简洁:

var $items1 = $('.qs-option-name:has(span.highlighted)').map(function() {
  return $(this).parent().parent();
}).get();
$items1.insertAfter('ul li.first');

请注意,上述内容略有不同,:has()将匹配任何子对象,不仅像原始实例一样匹配单个实例,而且在上下文中似乎没有重要区别的情况下也是如此。