1

我正在尝试重新排序一些数字标签,但我只希望它循环遍历包含具有特定类的子项的选择器。

我的html:

<div class="input-prepend">
   <span class="add-on">1</span>
   <input data-line-id="4613" type="text" class="input-large address-line" value="6 Flakefield">
   <img data-toggle="tooltip" class="input-action delete-line" src="/public_html/images/delete.png" width="16" height="16" data-original-title="Delete line 1.">
</div>

和jQuery:

$('#addressStepContent').on('click', '.delete-line', function(){
   //$(this).parent().detach();
   $.each($(this).parent().siblings('> .address-line').andSelf(), function(i, v){
       $(this).children('.add-on').text(i+1)
   })
})

这不起作用,它只会影响input-prepend您单击删除图像的 div。

如何让这个循环遍历包含有类的孩子的选择器.address-line


它还需要在遇到标签元素时停止或跳出循环。

4

4 回答 4

1

使用 find ..我认为你不需要循环

提这个..

 $(this).parent().find('.add-on').text(i+1)

或者

$(this).siblings('.add-on').text(i+1)

或者

$(this).closest('.add-on').text(i+1)
于 2013-03-20T07:56:22.473 回答
1

试过这样??

 $.each($(this).parent().find('.address-line'), function(i, v){
        $(this).children('.add-on').text(i+1)
      })
于 2013-03-20T08:03:03.163 回答
1

试试这个:

$('#addressStepContent').on('click', '.delete-line', function(){
    var i = $(this).closest('div').index();
    $(this).siblings('.add-on').text(i+1);
});

为此,您需要一个局部变量。

.each()根本不需要,.siblings()似乎有点不正确。试试这个,看看它是否有帮助。

查看演示

于 2013-03-20T08:07:49.503 回答
0

这是我想出的解决方案。如果您对如何使其变得更好有任何想法,请告诉:

$('#addressStepContent').on('click', '.delete-line', function(){
      targets = $(this).parent().siblings();

      $(this).parent().detach();
      n = 0
      $.each(targets, function(i, v){
        if($(this).is('label') && $(this).text() != 'Address lines')
        {
          alert($(this).text())
          return false;
        } else {
          if($(this).children('.add-on').length > 0)
          {
            n++;
          }
          $('.add-on', this).text(n);
        }
      })
    })
于 2013-03-20T08:51:35.273 回答