2015-04-22 3 views
0

Глядя на это link, я думал, что классы фактически индексируются. Если у меня есть этот код, как я могу получить в JavaScript или jQuery индекс класса нажатой кнопки?Как узнать, какой индекс в классе нажат

<button class="class_name" id="b1"></button> 
<button class="class_name" id="b2"></button> 
+1

Несколько запутанным, классы не индексируются, и есть на самом деле не индексация происходит на всех, но JQuery имеет 'index' метод, который подсчитывает количество братьев и сестер выше элемент и рассказать вам, сколько других элементов есть перед ним в DOM, давая вам своего рода индекс? – adeneo

+0

Они, похоже, были проиндексированы в этом примере w3schools. http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_document_getelementsbyclassname – typescript

+0

Это намного яснее исходного вопроса. Любой метод, который имеет множественное число 's', например' getElements ...', возвращает [nodeList] (https://developer.mozilla.org/en-US/docs/Web/API/NodeList), который массив-подобный объект с индексами для доступа к каждому возвращаемому элементу. – adeneo

ответ

0

DEMO: http://jsfiddle.net/mg7zau4c/

JQuery index

Поиск заданного элемента из числа элементов.

$('.class_name').on('click', function(){ 
    console.log($(this).index()); 
}); 

Спасибо. Как вернуть идентификатор из этого? - Синтаксические 7 минут назад

$(this).attr('id'); 
+0

Спасибо. Как вернуть идентификатор из этого? – typescript

+0

'$ (this) .attr ('id');' – wahwahwah

+0

Спасибо за помощь. – typescript

0

в JQuery: $ ("# b1") .index()

EDIT: только что видел ваши обновления, вы можете сделать это в JQuery кнопке щелкнул индекс

$('button').click(function (event) { 
    alert($(this).index()); 
}); 
+0

Как вернуть id, поскольку я собираюсь установить его как переменную – typescript

+0

'$ (this) .attr ('id');' – wahwahwah

+0

Спасибо за помощь. – typescript

0

Вы можете думать о NodeList, который возвращается по var nodes = document.querySelectorAll('.class_name'), который затем может сделать nodes.length и console(nodes[1].id), например.

see MDN

+0

Спасибо за помощь. – typescript

0

Без JQuery:

var index, 
    buttons = document.getElementsByClassName('class_name'); 
for(var i=0;i<buttons.length;i++){ 
    buttons[i].onclick = function(){ 
     for(var j=0;<buttons.length;j++){ 
      if(buttons[j]==this) { 
       index = j; //console.log(j), etc 
       break; 
      } 
     } 
    } 
} 

С одной меньше фигурной скобкой и fiddle:

[].slice.call(document.getElementsByClassName('class_name')).forEach(function(o,i,arr){ 
    o.onclick = function(){ 
     var index, that = this; 
     var search = arr.some(function(b,j){ 
      index = j; 
      return that == b; 
     }); 
     alert(index); 
    } 
}); 

нодлистов всегда будут в порядке, но если вы реорганизовать элементы, которые вы будете необходимо снова запросить getElementsByClassName.

+0

Спасибо за помощь. – typescript

0

Вы можете использовать это, чтобы перебирать через них элемент, содержащий кнопки. Предполагая, что единственные дети - это кнопки, о которых идет речь, вы можете получить такой индекс.

document.getElementById('buttonContainer').addEventListener('click', function(e) { 
 
    var clickedButton = e.target, 
 
     index = -1; 
 
    [].slice.call(this.children).some(function(el, idx) { 
 
    if (e.target === el) { 
 
     index = idx; 
 
     return true; 
 
    } 
 
    return false; 
 
    }); 
 
    document.getElementById('indexText').textContent = index + ' ' + e.target.id; 
 
});
<div id="buttonContainer"> 
 
<button class="class_name" id="red"></button> 
 
<button class="class_name" id="blue"></button> 
 
<button class="class_name" id="purple"></button> 
 
<button class="class_name" id="magenta"></button> 
 
<button class="class_name" id="rouge"></button> 
 
<button class="class_name" id="cyan"></button> 
 
<button class="class_name" id="yellow"></button> 
 
<button class="class_name" id="black"></button> 
 
    </div> 
 
<p id="indexText"></p>

+0

Спасибо за помощь. – typescript

Смежные вопросы