0

我有一些具有属性的 div:rowNumber。其中一个有一个属性:isOpen=1.

在它之后的所有其他人都有isOpen=0

例如:

<div class="statusCell" isOpen="0" rowNumber="1">

我想获取statusCell在isOpen = 1的div之后找到的所有具有类的div,并将它们的rowNumber减少一。

我需要做类似的事情:

$('.statusCell[isOpen=1]').nextAll('.statusCell[isOpen=0]').each(function() {
    var rowNumber = $(this).attr("rowNumber");
    var newRowNumber = parseInt(rowNumber, 10) - 1;
    $(this).attr('rowNumber', newRowNumber.toString());
});

但它不起作用,因为:

$('.statusCell[isOpen=1]').nextAll('.statusCell[isOpen=0]').length

是零。。

示例代码是:

<td class="DesignedTableTD">
    <div class="statusCell" style="cursor:pointer;" isOpen="0" rowNumber= "1">
       <p style="display:inline;" class="yellow" title="fd">
         <img alt="Active" src="@Url.Content("~/Images/play.png")" class="help"/>
       </p>&#9661;
    </div>
</td>

任何帮助表示赞赏!

4

2 回答 2

2

nextAll选择所选元素的下一个匹配的兄弟姐妹,这里不是这种情况,您可以使用以下index()方法:

var $statusCell = $('.statusCell[isOpen]'),
          $open = $statusCell.filter('[isOpen=1]'),
              i = $statusCell.index($open);

$statusCell.filter(':gt('+i+')').foo();

// Decreasing attributes' value
// $statusCell.slice(++i).attr('rowNumber', function(_, value) {
//    return +value - 1;                           
// });

注意isOpenrowNumber不是有效的属性,如果页面的 Doctype 是 HTML5,你可以使用data-*属性来代替。

于 2013-09-12T17:05:27.860 回答
1

或者...

var oStatCell = querySelectorAll(".statusCell[isOpen=1]");
for(i = 0; i < oStatCell.length; i++) {
    var cStatCell = oStatCell[i].querySelectorAll(".statusCell[isOpen=0]");
    for(j = 0; j < cStatCell.length; j++) {
        cStatCell[j].setAttribute("rowNumber", String(parseInt(cStatCell[j].getAttribute("rowNumber")) - 1));
    }
}

并不是说这是一个更好的选择,但我认为有一个非基于库的选项可用是件好事。

querySelectorAll() 文档:https ://developer.mozilla.org/en-US/docs/Web/API/Document.querySelectorAll

于 2013-09-12T17:43:35.960 回答