我有一个解决上一个问题的工作解决方案,但它不像感觉一样好程序员的习惯。有没有更好的解决方案,或者这只是一条路?
这是我的HTML:
<ul>
<li onclick="answer(this)">A</li>
<li onclick="answer(this)">B</li>
<li onclick="answer(this)">C</li>
<li onclick="answer(this)">D</li>
</ul>
我的JS:
window.answer = function (elm) {
if ($(elm).is(':nth-of-type(1)')) {
alert('elm is 1st of type');
} else if ($(elm).is(':nth-of-type(2)')) {
alert('elm is 2nd of type');
} else if ($(elm).is(':nth-of-type(3)')) {
alert('elm is 3rd of type');
} else if ($(elm).is(':nth-of-type(4)')) {
alert('elm is 4th of type');
}
};
此代码的作用是,它会警告第n个孩子(第2个<li>
警告elm is 2nd of type
)
简而言之,是否有更好(更合理)的方法来实现相同的结果?如果是这样,我该如何实现呢?
干杯!
答案 0 :(得分:2)
由于您正在使用JQuery,因此您可以找到使用index
函数的实用程序:
在你的回答功能中,你可以为你想要匹配的所有li
添加一个选择器(例如,如果你有多个无序列表),然后:
var zeroBasedIndex = $("your-li-selector").index(elm);
请注意,这会返回一个从零开始的位置,随时可以++
找回您的位置。
希望这有帮助
答案 1 :(得分:0)
<ul>
<li data-type="1st" onclick="answer(this)">A</li>
<li data-type="2nd" onclick="answer(this)">B</li>
<li data-type="3rd" onclick="answer(this)">C</li>
<li data-type="4th" onclick="answer(this)">D</li>
</ul>
脚本
window.answer = function (elm) {
var type = $(elm).attr("data-type");
var message = 'elm is ' + type + ' of type';
alert(message);
};
如果你不能编辑html:
window.answer = function (elm) {
var type = parseInt($(elm).index()) + 1;
switch(type)
{
case 1:
{
type += "st";
}
break;
case 2:
{
type += "nd";
}
break;
case 3:
{
type += "rd";
}
break;
case 4:
{
type += "th";
}
break;
}
var message = 'elm is ' + type + ' of type';
alert(message);
};
答案 2 :(得分:0)
<ul id="myList">
<li>A</li>
<li>B</li>
<li>C</li>
<li>D</li>
</ul>
$("#myList").on("click", "li", function() {
alert( $(this).index() );
});
所以,这是事件委托(你可以在jquery docs中找到它)。这有效的做法是它将一个事件监听器附加到你的ul元素,过滤目标的方式只有在点击li类型的子项时才会引发事件,然后在myList父项中返回该子项的索引位置。