如何使用JavaScript获取被点击的数组元素的索引?
How to get the index of the clicked array element using JavaScript?
我有一个动态创建的跨度元素数组列表。我想获取点击的跨度元素的索引。
boundItemClick(e) {
console.log(e.target) //results <span>some label</span>
}
render() {
var data=[];
data.push (<div>
<span>{textLabel} onClick={this.boundItemClick.bind(this)}</span>
</div>
}
但是我无法通过这种方式获取索引,获取已点击数组元素的索引的最佳方法是什么?
您可以将数据数组的当前长度作为索引传递给您的函数:
boundItemClick(idx, e) { // add idx as argument
console.log(idx);
}
render() {
var data=[];
data.push (<div>
<span>{textLabel} onClick={this.boundItemClick.bind(this, data.length)}</span>
</div> );
}
Pure JS
解决方案。
注意:它是从1开始计数的,但是如果你想你可以调整它从0开始计数索引。
var spans = document.getElementsByTagName('span');
[...spans].forEach((v,i) => v.addEventListener('click', function() {
console.log(i+1);
}));
<span>one</span>
<span>two</span>
<span>three</span>
jQuery
解.
$('span').click(function(){
console.log($(this).index());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span>one</span>
<span>two</span>
<span>three</span>
迭代元素,为每个元素分配一个点击事件侦听器,并使用 lambda 缓存并将索引传递给自定义处理函数。
// Initialize our dynamically created elements array
const elements = [];
// Simulate the creation of elements dynamically
const mkButton = text => Object.assign(document.createElement('button'), { textContent: text })
for(var i = 10; i-- > 0;) elements.push(document.body.appendChild(mkButton('click')));
// Custom handler function
const handler = index => console.log(index);
// Assign the listener with the cached index to each element
elements.forEach((e, i) => e.addEventListener('click', event => handler(i), false));
我有一个动态创建的跨度元素数组列表。我想获取点击的跨度元素的索引。
boundItemClick(e) {
console.log(e.target) //results <span>some label</span>
}
render() {
var data=[];
data.push (<div>
<span>{textLabel} onClick={this.boundItemClick.bind(this)}</span>
</div>
}
但是我无法通过这种方式获取索引,获取已点击数组元素的索引的最佳方法是什么?
您可以将数据数组的当前长度作为索引传递给您的函数:
boundItemClick(idx, e) { // add idx as argument
console.log(idx);
}
render() {
var data=[];
data.push (<div>
<span>{textLabel} onClick={this.boundItemClick.bind(this, data.length)}</span>
</div> );
}
Pure JS
解决方案。
注意:它是从1开始计数的,但是如果你想你可以调整它从0开始计数索引。
var spans = document.getElementsByTagName('span');
[...spans].forEach((v,i) => v.addEventListener('click', function() {
console.log(i+1);
}));
<span>one</span>
<span>two</span>
<span>three</span>
jQuery
解.
$('span').click(function(){
console.log($(this).index());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span>one</span>
<span>two</span>
<span>three</span>
迭代元素,为每个元素分配一个点击事件侦听器,并使用 lambda 缓存并将索引传递给自定义处理函数。
// Initialize our dynamically created elements array
const elements = [];
// Simulate the creation of elements dynamically
const mkButton = text => Object.assign(document.createElement('button'), { textContent: text })
for(var i = 10; i-- > 0;) elements.push(document.body.appendChild(mkButton('click')));
// Custom handler function
const handler = index => console.log(index);
// Assign the listener with the cached index to each element
elements.forEach((e, i) => e.addEventListener('click', event => handler(i), false));