[英]get index of class element with inline onclick - pure js no jQuery
所以我有一些類元素:
<span class="show" onclick="show()">show</span>
<span class="show" onclick="show()">show</span>
<span class="show" onclick="show()">show</span>
當我單擊這些元素之一時,出於某種原因我需要索引。 我知道如何使用jQuery,但這不是我要的,這里。
我的js函數應如下所示:
function show() {
var index = document.getElementsByClassName('show')[??];
alert(index);
}
純JavaScript怎么可能? 注意:我必須堅持無法更改的onclick =“ show()” 。
我希望有人可以幫助,在此先感謝:)
只需獲取所有元素的數組並找到獲得點擊的當前元素
function show(el) { var els = Array.prototype.slice.call( document.getElementsByClassName('show'), 0 ); console.log(els.indexOf(event.currentTarget)); }
<span class="show" onclick="show(this)">span 1</span> <span class="show" onclick="show(this)">span 2</span> <span class="show" onclick="show(this)">span 3</span>
您可以嘗試如下操作:
addEventListener
綁定事件處理程序。 這將允許您使用this
。 Array.indexOf
ONCLICK
function show(self){ var spans = document.querySelectorAll('.show'); console.log(Array.from(spans).indexOf(self)) }
<span class="show" onclick="show(this)">show</span> <span class="show" onclick="show(this)">show</span> <span class="show" onclick="show(this)">show</span>
的addEventListener
function show(){ var spans = document.querySelectorAll('.show'); console.log(Array.from(spans).indexOf(this)) } function registerEvent(){ var spans = document.querySelectorAll('.show'); for(var i = 0; i< spans.length; i++){ spans[i].addEventListener("click", show) } } registerEvent();
<span class="show" >show</span> <span class="show" >show</span> <span class="show" >show</span>
如果您絕對堅持使用onclick
屬性(即使您確實不需要),也可以:
// get live collection so you only need to call this once var liveCollection = document.getElementsByClassName('show'); function show(event) { // convert liveCollection to array for `.indexOf()` // either ES6 var shows = [...liveCollection]; // or ES5 var shows = Array.prototype.slice.call(liveCollection); var index = shows.indexOf(event.currentTarget); alert(index); }
.show { cursor: pointer; }
<span class="show" onclick="show(event)">show</span> <span class="show" onclick="show(event)">show</span> <span class="show" onclick="show(event)">show</span>
但是,我寧願建議您使用委托事件來處理動態添加的元素,因為使用onclick
屬性被認為是不好的作法, 但不要只聽我的話。
// see below for how to select the best container var container = document.body; // single event listener for all dynamically added elements container.addEventListener('click', function (event) { if (event.target.classList.contains('show')) { show.call(event.target, event); } }); // get live collection so you only need to call this once var liveCollection = container.getElementsByClassName('show'); function show(event) { // convert liveCollection to array for `.indexOf()` // either ES6 var shows = [...liveCollection]; // or ES5 var shows = Array.prototype.slice.call(liveCollection); // this === event.target var index = shows.indexOf(this); alert(index); }
.show { cursor: pointer; }
<span class="show">show</span> <span class="show">show</span> <span class="show">show</span>
關於委托事件處理的onclick
是,您不需要onclick
屬性來處理動態添加的元素,因此這將最適合您的特定用法。
建議(但不是必須)將委派事件的事件偵聽器附加到所有動態添加的元素中最直接的container
上,以便click
事件不必一直冒泡到document.body
。 這使得處理更加有效。
如果您只是在尋找索引,可以將其傳遞給show()方法。
<span class="show" onclick="show(0)">show</span>
<span class="show" onclick="show(1)">show</span>
<span class="show" onclick="show(2)">show</span>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.