2013-02-14 10 views
0

Есть ли способ разрешить мне перебирать упорядоченный список, похожий по функциональности как table.rows? Я использую Javascript.Упорядоченный список Iteration в Javascript

Причина, по которой я спрашиваю об этом, заключается в том, что у меня есть упорядоченный список, содержащий внутри себя другой упорядоченный список. Я просто хочу вернуть элементы родительского списка, а не дочерние.

<ol id="pList"> 
    <li>Item A</li> 
    <li> 
     <ol id="cList"> 
      <li>A's Child 1</li> 
      <li>A's Child 2</li> 
     </ol> 
    </li> 
    <li>Item B</li> 
    <li>Item C</li> 
    <li>Item D</li> 
</ol> 

Теперь я использую getElementsbyTag и возвращает все ли, включая листинг в cList. Я просто хочу, чтобы они были в pList.

Благодаря

FYI: Я предпочел бы сделать это в JavaScript. Код должен работать в Greasemonkey. Я не очень много знаю о jquery, и я не очень много программист на javascript.

+0

Вы спрашиваете только для ванильного Javascript или можете использовать jQuery? – Sunyatasattva

+0

вы хотите «простой» javascript или вы можете использовать jquery? – pbaris

+7

Просто для удовольствия, давайте предположим, что вопрос, который * не помечен * [тег: jquery], не * хочет * ответ jQuery. –

ответ

4

Нет specific Недвижимость, которая дает вам прямой доступ к детям <li> детей <ol>.

Однако их очень просто перечислить, особенно если учесть, что единственными законными детьми <ol> должны быть текстовые узлы с пробелами и узлы <li>.

var ol = document.getElementById('pList'); 
var li = []; 
var node = ol.firstChild; 
while (node) { 
    if (node.tagType === 3 && node.tagName === 'LI') { 
     li.push(node); 
    } 
    node = node.nextSibling; 
} 

В конце которого, массив li содержит необходимые детей.

Вышеупомянутый код будет работать в любом браузере. Коллекция .children имеет проблемы с более старыми версиями MSIE, а querySelectorAll еще более современна (и, следовательно, менее широко поддерживается).

+0

Как насчет 'var li = document.getElementById ('pList'). Children;' – jantimon

+0

@Ghommey '.children' имеет« странное »поведение в более старых версиях MSIE. См. Http://stackoverflow.com/questions/7935689/what-is-the-difference-between-children-and-childnodes-in-javascript – Alnitak

+0

И '.childNodes'? Или мы имеем в виду то же самое здесь? –

0

Там в таблице непосредственных детей в каждом JavaScript Object:

document.getElementById('pList').children 

Вы можете даже итерацию через него и проверить Независимо от ваших потребностей:

var el = document.getElementById('pList'); 
for (var i = 0; i < el.children.length; i++) { 
    if (el.children[i].tagName == "LI") { 
     el.children[i].doWhatever(); 
    } 
} 
+2

См. Http://stackoverflow.com/questions/7935689/what-is-the-difference-between-children-and-childnodes-in-javascript – Alnitak

+0

Отмечены проблемы совместимости, спасибо! –

+0

Я надеялся, что есть прямой доступ, например table.rows. Поэтому я думаю, что старомодный способ будет. – C3PO

1

При использовании querySelectorAll() * вариант для вас , это легко:

var listItems = document.querySelectorAll('#pList > li'); 

* примечание: это на и не имеет ничего общего с jQuery

+0

+1 быстрый и читаемый – jantimon

+0

Nice. Будет использовать его в следующий раз, так как у OL не всегда есть идентификаторы в этом случае. благодаря – C3PO