jQuery nth-child 删除

Posted

技术标签:

【中文标题】jQuery nth-child 删除【英文标题】:Jquery nth-child removal 【发布时间】:2017-08-11 23:51:59 【问题描述】:

我有 3 张图片

<img>
<img>
<img>

当我删除图像时

 $('img:nth-child(1)').remove();

然后添加另一个。

$( '.hero .trim').append($img);
然后尝试再次删除第一个
 $('img:nth-child(1)').remove();

它不起作用。如何让它工作,以便新图像是第一个孩子?

编辑完整代码...

function completeIt () 
  $('.hero .trim img:nth-child(1)').remove();
;

if(this.talentClick == false) 

//$('.hero .trim img').append('<img>').attr('src', '/img/headers/'+deptname+'-header-mobile.jpg').attr('data-mobile', '/img/headers/'+deptname+'-header-mobile.jpg').attr('data-tablet', '/img/headers/'+deptname+'-header-tablet.jpg').attr('data-desktop', '/img/headers/'+deptname+'-header.jpg')




let img = '';
let width= $(document).width();



var $img = $('<img />').attr('src', '/img/headers/'+deptname+'-header.jpg').attr('data-mobile', '/img/headers/'+deptname+'-header-mobile.jpg').attr('data-tablet', '/img/headers/'+deptname+'-header-tablet.jpg').attr('data-desktop', '/img/headers/'+deptname+'-header.jpg')

$( '.hero .trim').append($img);


let firstimgheight = $('.hero .trim img:nth-child(1)').height();
let secondimgheight = $('.hero .trim img:nth-child(2)').height();


console.log($('.hero .trim img:nth-child(1)') );

 tl.to( $('.hero .trim img:nth-child(1)'), 0.2, css:marginTop: -firstimgheight+"px")

.to($('.trim'), 1, css:height: secondimgheight+'px');

【问题讨论】:

调查事件委派,jQuery无法看到添加的元素。 span> 这只是为了说明的目的 - 有一个容器。这更像是关于jQuery如何在删除后处理nth-child的问题。 span> 问题是您的代码确实删除了第一张图片,但第一张图片不是您想要的特定图片吗? “它不起作用” - 它有什么作用?你怎么称呼它?这里的一些 cmets 建议使用事件处理程序,但您没有提到您的代码是从单击事件或类似事件中调用的,那么您如何/何时调用第二次删除? .hero .trim 相对于其他 3 张图像在哪里。与同一容器中的其他3个图像是吗?如果您提供更多上下文会更容易。 我不确定使用您的代码是否有任何问题。您可能还有其他问题使其无法正常工作。查看工作示例:jsfiddle.net/r81fqe4m 【参考方案1】:

如果您希望新图像成为第一个子图像,您想使用prepend 而不是append(单击第一个按钮删除第一个子图像并添加新图像,然后单击第二个按钮删除新添加的图像):

$(function() 
  var $img = '<img src="http://placehold.it/250x250/000/fff" />';
  $('button.one').click(function() 
    $('img:nth-child(1)').remove();
    $('.hero .trim').prepend($img);
  );
  $('button.two').click(function() 
    $('img:nth-child(1)').remove();
  );
);
button 
display:inline-block;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="one">Button 1</button>
<button class="two">Button 2</button>
<div class="hero">
  <div class="trim">
    <img src="http://placehold.it/250x250/fff/ccc" />
    <img src="http://placehold.it/250x250/ccc/aaa" />
    <img src="http://placehold.it/250x250/eee/ccc" />
  </div>
</div>

【讨论】:

【参考方案2】:

有关使用标签的示例,请参阅 https://jsbin.com/fixelobeno/edit?html,output。

  <div class="x">
    <img class="1">
    <img class="2">
    <img class="3">
  </div>

  <script>
  $('img:nth-child(1)').remove();
  $( '.x').append("<img class='new'>");
  $('img:nth-child(1)').remove();
  </script>

第一个子元素被移除,然后一个新的标签被附加到 div 上,最后新的第一个元素被删除。

【讨论】:

【参考方案3】:

为了简单起见,我们假设这些图片的父 div 有一个 id “main”。 您需要使用 insertBefore 而不是 append。示例:

要删除第 n 个图像:

$("#main img:nth-child(1)").remove();

先添加新的img:

$("<img src='' />").insertBefore("#main img:nth-child(1)");

append 将项目添加到子标签的最后位置。 insertBefore 将其添加到您指定添加的任何位置。

【讨论】:

以上是关于jQuery nth-child 删除的主要内容,如果未能解决你的问题,请参考以下文章

7.nth-of-type | nth-child?CSS

利用jquery给指定的table动态添加一行删除一行

利用jquery给指定的table动态添加一行删除一行

jQuery找到'nth-child'值

使用 jQuery 覆盖 nth-child 伪类

H5 19-序选择器下