2014-06-13 3 views
0

전체 문서에서 목록 항목을 변경하려고합니다. 다음 코드를 사용하고 있지만 오류가 발생합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?자바 스크립트에서 목록 항목 변경하기

Fiddle

+0

무엇이 오류입니까? –

+0

페이지에서 자바 스크립트를 넣고있는 오류는 무엇입니까? 우리는 더 많은 정보가 필요합니다. – ndugger

답변

5

document.getElementsByTagName() 지정된 태그 이름을 가진 요소의 HTMLCollection을 반환하기 때문에

function changeListItems() { 
var listItem = document.getElementsByTagName("ul"); 
var docItem = listItem.getElementsByTagName("li"); 
docItem.setAttribute("class", "list-group-item"); 
}; 
changeListItems(); 
.

각 요소를 반복하여 클래스를 추가해야합니다. 예를 들어

:

var docItem = listItem.getElementsByTagName("li"); 

for(var i=0; i< docItem.length; i++) 
{ 
    docItem[i].className = "list-group-item" 
} 
+0

페이지에있을 수있는 정렬 된 목록 요소에 클래스를 추가하려고합니다. OP는 분명히 그것을 원하지 않습니다. 중첩 된 루프는'querySelectorAll'을 사용하여 피할 수 있습니다. 모든 브라우저에서 IE8 이상까지 지원됩니다. –

+1

@EliasVanOotegem 네 말이 맞아! 중첩 루프는 너무 복잡하고 지저분 해 지므로 피해야합니다. –

+1

@ EliasVanOotegem - 아마도 이터레이터를 DOM API에 추가하기위한 움직임을 시작할 수 있습니다. 'document.querySelectorAll ('ul li'). each (function (el) {el.className = 'foo'})'를 생각해 보자. – RobG

2

getElementsByTagName 돌려 NodeList, 당신은 그것을 반복해야합니다.

두 레벨의 태그가 있으므로 중첩 루프를 작성해야합니다. 그러나 querySelectorAll으로 모든 목록 항목을 한꺼번에 가져 오는 것이 더 간단합니다.

function changeListItems() { 
    var docItem = document.querySelectorAll("ul li"); 
    for (var i = 0; i < docItem.length; i++) { 
     docItem[i].setAttribute("class", "list-group-item"); 
    } 
} 
+0

오른쪽 선택기를 실제로 사용하는 유일한 사람이 +1이기 때문에 –

+0

+1 너무 깨끗한 접근! –

관련 문제