[英]How do I know my position inside an li when interacting with an element inside that li?
您可以為此使用index()
函數。 如果您正在使用列表項下的輸入字段。 然后像這樣選擇:
$("input.descriptionInput").parents("li").index();
我認為它將為您工作。
您的事件應具有srcElement屬性,其中包含元素的來源元素。 從那里您可以遍歷DOM到達祖父母元素。
例如:
myElement.addEventListener('keyup',function(event){
let input=event.srcElement;
let div=input.parentElement;
let li=div.parentElement;
console.log(li.textContent);
//or just (event.srcElement.parentElement.parentElement.textContent)
})
當然,這僅在您確定輸入將始終是li的孫子時才有效。 如果出於任何原因添加了另一個元素,您的代碼將中斷。 搜索元素更安全
我只是使用while循環搜索元素。
let element=event.srcElement;
//while the element isn't an li, and it has a parentElement;
while(element.tagName !=='LI' && element.parentElement){
element=element.parentElement;
}
console.log(element) //should have found the first li ancestor
嘗試使用.closest
函數導航到最近的li
,然后使用index()
確定索引。 另外,由於您正在動態添加li,因此可能需要將change
偵聽器添加到DOM。
<ul>
<li>
<div class="description">
<input class="descriptionInput" type="text">
</div>
</li>
<li>
<div class="description">
<input class="descriptionInput" type="text">
</div>
</li>
</ul>
<script>
$(document).on('change','ul li input.descriptionInput', function(){
var index = $(this).closest('li').index();
alert(index);
});
</script>
事件處理程序中的this
值是附加了處理程序的對象,無論是通過addEventListener
還是通過將函數分配給“ onEventName”屬性/屬性。 但是,如果委派了事件處理, this
可能不是觸發事件的對象。
event
對象的target
屬性是觸發了事件的對象。 ( srcElement
是一種專有的和非標准的別名的target
)。
因此,如果您正在監聽輸入上觸發的事件,例如“ change”,則li
元素位於父節點鏈中,您可以直接在處理程序中將其編碼為
function (event) {
let li = event.target.parentNode.parentNode;
//... do stuff with li
通過假定特定的元素結構或通過搜索父節點鏈,這很脆弱:
function (event) {
let li;
for( li = event.target; li = li.parentNode;) {
if( li.tagName == "LI") {
break;
}
}
// process li ....
查找LI元素或將li
設置為null
。
如果無序或無序元素沒有自己的ID,則可以在輸入元素的父節點鏈中找到它,類似於在上方查找LI元素的方式(即,直接編碼或搜索)。
LI元素在OL或UL列表條目中的位置可以通過在OL / UL元素的children
屬性中搜索並將其與元素匹配來找到。
請注意, node.children
集合是活動的,並且在通過動態在DOM中移動LI元素來對LI元素進行排序時,不應使用它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.