как я могу подсчитать количество пролетов до диапазона с определенным идентификатором.
например:
до span с id = "a5" является 6-м пролетом.
<table border="3">
<tr>
<td><span id="a2" class="arrow_icon a6" isClicked="0"></span></td>
<td><span id="a1" class="arrow_icon a1" isClicked="0"></span></td>
<td><span id="a3" class="arrow_icon a11" isClicked="0"></span></td>
<td><span id="a4" class="arrow_icon a16" isClicked="0"></span></td>
<td><span id="a6" class="arrow_icon a2" isClicked="0"></span></td>
</tr>
<tr>
<td><span id="a5" class="arrow_icon a21" isClicked="0"></span></td>
<td><span id="a7" class="arrow_icon a7" isClicked="0"></span></td>
<td><span id="a8" class="arrow_icon a12" isClicked="0"></span></td>
<td><span id="a9" class="arrow_icon a17" isClicked="0"></span></td>
<td><span id="a10" class="arrow_icon a22" isClicked="0"></span></td>
</tr>
</table>
Я попробовал что-то вроде:
var count = 0;
$("span:first").nextUntil("#a5").andSelf().each(function(index) {
count++;
});
alert(count); // should alert '6'
любая помощь ценится!
Прежде всего, ваш первоначальный выбор содержит только один элемент span в первом <td>...</td>
. Поэтому вы должны изменить его на довольно $("span")...
Во-вторых, функция nextUntil ищет среди братьев и сестер выбранных элементов, просто посмотрите на документы jQuery, чтобы подтвердить, что:
Это означает, что ваша коллекция интервалов меняется на... ноль. Зачем? Их прямыми родителями являются теги <td>...</td>
, которые содержат только один диапазон, поэтому ни у кого из них нет ни одного брата и сестры.
Средство довольно просто:
var count = 0;
$("span").each(function(i, e){
if(!$(this).is("#a5"))
count++; //count it up
else
return false; //exit the each function
});
alert(count); //alerts '5', as it should
Основная причина, по которой он работает, заключается в том, что выбор уже отсортирован так, как они представлены в DOM. В противном случае было бы очень сложно что-либо сделать с этим.
ура
Вы не можете использовать .nextUntil(), потому что это касается братьев и сестер, и не все элементы span в вашем примере являются братьями и сестрами. Помещение селектора в $(...)
должно приводить к созданию объекта jQuery, который соблюдает порядок элементов в DOM, поэтому, может быть, просто:
var count = 0;
$("span").each(function(i) {
count++;
if (this.id === "a5") {return false;} // breaks out of loop when the id is found
});
console.log(count);
Вы не можете использовать nextUntil(), потому что они не братья и сестры. Это лучший способ, о котором я могу думать.
var a5index;
$('table span').each(function(idx){
if( $(this).is('#a5')){
a5Index = idx;
return true; // No reason to keep going after we find it...
}
});
Просто .each()
все промежутки с .each()
и используйте индекс (число итераций цикла) в качестве счетчика:
var c;
$("span").each(function(index, element) {
if(element.id == "a5") {
c = index; // set counter to current index value
return false; // break the each loop
}
});
alert(c);
Используйте return false, чтобы выйти из цикла.each раньше
var count = 0;
var toId = "a5";
$("span").each(function(){
count++;
if(this.id == toId) {
return false;
}
});
console.log(count);
или используйте одну строку с использованием .index
console.log( $("span").index($("#a5")) );
this
в$(...)
просто так, чтобы вы могли получить атрибут id, - это пустая трата. Просто используйтеthis.id