2016-12-16 66 views
2

我有一個無序列表和li元素可以拖動和順序可以改變一個UL的正確順序。這工作正常的問題發生我使用這行代碼: var items = ul.getElementsByTagName(「li」); 它將以原始順序返回HtmlCollection,而不是用戶將列表項目移入的當前順序。功能的getElementsByTagName沒有返回有拖動列表項

我拍攝的順序列表是在我已經搬了好李的身邊後,與Chrome瀏覽器的屏幕截圖。請注意它是如何像最初顯示一樣訂購的?

enter image description here

但是,如果我展開[0 ... 99]標籤我看到了正確的順序。 (如何看前幾名已經搬了嗎?這是我需要遍歷的順序。)

enter image description here

這裏是HTML文本。

<ul id="first_" class="sortable_unstyled" data-sortable-id="0" aria-dropeffect="move"> 
 
    
 
    <li draggable="true" role="option" aria-grabbed="false" style="list-style-type: none;" id="first_li_0" > 
 
    <div> 
 
     <input id="first_sectionnumber_0" type="number" /> 
 
    </div> 
 
    </li> 
 
    <li draggable="true" role="option" aria-grabbed="false" style="list-style-type: none;" id="first_li_1" > 
 
    <div> 
 
     <input id="first_sectionnumber_1" type="number" /> 
 
    </div> 
 
    </li> 
 
    // There is more than a 100 more lis after these 
 

 
    </ul>

JavaScript函數是:

 function RenumberQuestionIndexes(ulObj) { 
 
      var count = 0; 
 
      var ul = document.getElementById(ulObj); 
 
      var items = ul.getElementsByTagName("li"); 
 
      var indexinput = ulObj + "order_index_"; 
 

 
      for (var i = 0; i < items.length; ++i) 
 
      { 
 
       if(items[i].style.display.indexOf('none') >= 0) 
 
       { 
 
        document.getElementById(indexinput + i.toString()).value = -1; 
 
       } 
 
       else 
 
       { 
 
        document.getElementById(indexinput + i.toString()).value = count; 
 

 
        count++; 
 
       } 
 
      } 
 
    
 
     }

因此,如何能我通過的HTMLCollection項目列表進行迭代,並獲取當前顯示的實際順序屏幕上?

+0

你什麼時候調用'RenumberQuestionIndexes'?顯示你調用的代碼RenumberQuestionIndexes – 2016-12-16 16:06:03

+1

'getElementsByTagName'肯定會給你一個DOM元素順序的集合。您的拖動腳本如何更改其順序?如果你從'getElementsByTagName'得到的順序實際上不是你看到的順序,那麼它聽起來就像它只是在視覺上(這很奇怪)。 –

+0

另外,請注意這一點:http://stackoverflow.com/questions/38660832/element-children-has-elements-but-returns-empty-htmlcollection –

回答

0

經過很多頭撞擊後。我發現,如果我把我的var項目變成一個數組,它會起作用。

所以我改變了代碼,以這樣的:

 function RenumberQuestionIndexes(ulObj) { 
 
      var count = 0; 
 
      var ul = document.getElementById(ulObj); 
 
      var items = ul.getElementsByTagName("li"); 
 
      var indexinput = ulObj + "order_index_"; 
 

 
      var a = Array.from(items); 
 

 

 
      for (var i = 0; i < a.length; ++i) 
 
      { 
 
       if(a[i].style.display.indexOf('none') >= 0) 
 
       { 
 
        document.getElementById(indexinput + i.toString()).value = -1; 
 
       } 
 
       else 
 
       { 
 
        document.getElementById(indexinput + i.toString()).value = count; 
 

 
        count++; 
 
       } 
 
      } 
 
     }

新的數組列表項的正確的當前訂單。 我很想知道Array.from()如何做到這一點。