jQuery:不能在单个对象上使用“find”方法两次

时间:2010-11-24 16:45:30

标签: javascript jquery

我目前正试图在对象上使用jquery“find”方法两次,但它不允许我这样做,只有“find”的第一个实例正在工作。这是我想要运行的代码......

$("#phone_numbers > p:first-child").clone(true).insertBefore("#phone_numbers > span:last-child").find('.phone_type, .phone_number, .user_phones_id').val('').find('.delete_phone').remove();

上面的代码工作得很好,除了最后一个“find”方法,它不会删除带有“.delete_phone”类的元素。

但是,如果我将代码更改为这样......

$("#phone_numbers > p:first-child").clone(true).insertBefore("#phone_numbers > span:last-child").find('.delete_phone').remove();

它确实删除了带有“.delete_phone”类的元素。我认为这是因为我不能连续两次使用“find”方法,但我不确定。

有谁知道发生了什么事,或者是否有办法绕过这个问题?

谢谢!

2 个答案:

答案 0 :(得分:10)

您需要.end()跳回链中(所以您不会查看之前的.find()结果),如下所示:

$("#phone_numbers > p:first-child").clone(true).insertBefore("#phone_numbers > span:last-child").find('.phone_type, .phone_number, .user_phones_id').val('').end().find('.delete_phone').remove();

细分视图:

$("#phone_numbers > p:first-child").clone(true)
  .insertBefore("#phone_numbers > span:last-child")
  .find('.phone_type, .phone_number, .user_phones_id') //look in the cloned <p>
  .val('')                                             //empty those inputs
  .end()                                               //hope back to the <p>
  .find('.delete_phone')                               //look in the clone <p>
  .remove();                                           //remove those elements

答案 1 :(得分:1)

看起来你正在尝试将很多请求塞进一行,而你真的不需要。我不确定你的目标是什么,但我会更喜欢这样做。

相反,我们将其分解为三个简单的请求:

var numbers = $("#phone_numbers > p:first-child");//grab the data you want
numbers.insertBefore("#phone_numbers > span:last-child");//insert it where you want
$("#phone_numbers .delete_phone').remove();//remove numbers with class 'delete_phone'

不确定你要为val()部分做什么,因为你没有将值存储在变量中,也没有更改值。

如果您需要更多帮助信息。

W上。