警报应在文档中显示锚点的从零开始的索引,而不是在链接后面。 HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test page</title>
</head>
<body>
In my life, I used the following web search engines:<br/>
<a href="//www.yahoo.com">Yahoo!</a><br/>
<a href="//www.altavista.com">AltaVista</a><br/>
<a href="//www.google.com">Google</a><br/>
<script type="text/javascript" src="js/js8.js"></script>
</body>
</html>
JavaScript的:
function registerHandlers() {
var as = document.getElementsByTagName('a');
for (i = as.length; i-- >= 0;) {
as[i].onclick = function() {
alert(i);
return false;
}
}
}
我尝试使用jQuery:
$('a').click(function(event) {
var as = document.getElementsByTagName('a');
alert($(this).index());
});
但我得到的指数如1,3,5而不是0,1,2
答案 0 :(得分:2)
我的解决方案是向data-index
添加<a>
属性。
function registerHandlers() {
var as = document.getElementsByTagName('a');
for (var i = 0; i < as.length; i++) {
as[i].setAttribute('data-index', i);
as[i].onclick = function () {
alert(this.getAttribute('data-index'));
}
}
}
答案 1 :(得分:0)
试试这个(http://jsfiddle.net/bcjv6suf/):
alert($('a').index(this));
P.S。 https://api.jquery.com/index/#index-selector
更新:同样没有jquery(你需要使用闭包来传递参数)
function registerHandlers() {
var as = document.getElementsByTagName('a');
for (i = as.length; i-- >= 0;) {
as[i].onclick = (function(index) {
return function() {
alert(index);
return false;
}}(i));
}
}
答案 2 :(得分:0)
取决于您正在尝试查找该元素的索引。
使用jQuery
页面中所有<a>
内<a>
的实例索引:
var $links = $('a').click(function(event) {
alert($links.index(this));
});
兄弟姐妹组内的索引
<div id="div">
<a/>
<a/>
<a/>
</div>
$('#div a').click(function(event) {
alert($(this)index());
});
页面中所有元素的元素索引
$('a').click(function(event) {
alert($('*')index(this));
});
答案 3 :(得分:0)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test page</title>
</head>
<body>
In my life, I used the following web search engines:<br />
<a href="//www.yahoo.com">Yahoo!</a><br />
<a href="//www.altavista.com">AltaVista</a><br />
<a href="//www.google.com">Google</a><br />
<script type="text/javascript">
function registerHandlers() {
var as = document.getElementsByTagName("a");
for (var i = 0; i < as.length; i++) {
as[i].onclick = (function() {
var n = i;
return function() {
alert(n);
return false;
};
})();
}
}
registerHandlers();
</script>
</body>
</html>
答案 4 :(得分:0)
function registerHandlers() {
var as = document.getElementsByTagName('a');
for (var i = 0; i < as.length; i++) {
as[i].addEventListener('click', (function(i) {
return function(e) {
e.preventDefault();
alert(i);
}
})(i));
}
}
registerHandlers();
答案 5 :(得分:0)
不需要jQuery或诸如setAttribute
之类的奇异属性。这个问题是关于闭包的。另外,不要忘记防止默认行为,这是当前此实践问题的一部分。
function registerHandlers() {
var as = document.getElementsByTagName('a');
for (var i = 0; i < as.length; i++) {
const index = i; // the following anon function closes over this variable
as[i].onclick = function(event) {
event.preventDefault(); // prevent default behaviour
alert(index);
return false;
}
}
}