2013-05-16 2 views
0

ID가없는 h1 요소가 포함 된 기존 HTML 문서가 있습니다. 내가 달성하고자하는 것은 JavaScript를 사용하여 모든 h1 (s)을 얻은 다음 각 고유 ID에 추가 할 수 있어야한다는 것입니다.JavaScript가 HTML 문서에서 h1 요소를 가져와 고유 ID를 업데이트합니다.

검색했지만 작동하는 해결책을 찾을 수 없습니다.

+0

ID가 원하는 형식은 무엇입니까? 그리고 몇 가지 예제 HTML을 제공 할 수 있습니까? – MasNotsram

+2

ID없이 모든 DOM 요소에 액세스 할 수 있습니다. 왜 이럴 필요가 있니? –

+1

왜? 나는 당신이 원할지도 모르는 몇 가지 이유를 생각할 수 있지만 유용 할 수있는 것들은 "독창적 인"것 이상의 추가적인 요구 사항을 부과 할 것입니다. 어떤 문제를 해결하려고합니까? 우리가 그 사실을 안다면, 우리는 해결책이 무엇인지 생각하지 않고 문제를 해결할 수 있습니다. – Quentin

답변

3

document.getElementsByTagName("h1")으로 모두 시도해보십시오. 루프를 반복하여 id이 있는지 확인하고 적절하게 작동합니다. 시도 :

var h1s = document.getElementsByTagName("h1"); 
for (var i = 0; i < h1s.length; i++) { 
    var h1 = h1s[i]; 
    if (!h1.id) { 
     h1.id = "h1" + i + (new Date().getTime()); 
    } 
} 

DEMO :http://jsfiddle.net/kTvA2/

데모를 실행 한 후, 당신은 DOM을 검사하는 경우, 당신은 새로운, 독특한 id이 4 개 h1 요소 만점에 3 개를 볼 수 있습니다. 처음에는 id 인 것을 변경하지 않았습니다.

이 코드는 모든 요소가 준비/렌더링 된 후에 실행해야합니다.이 코드는 window.onload 처리기 안에 코드를 넣음으로써 얻을 수 있습니다. 제공된 데모는 암시 적으로 코드를 실행하도록 설정됩니다.


UPDATE : jQuery로

, 당신은 사용할 수 있습니다

$(document).ready(function() { 
    $("h1:not([id])").attr("id", function (i, attr) { 
     return "h1" + i + (new Date().getTime()); 
    }); 
}); 

DEMO :http://jsfiddle.net/kTvA2/7/

+0

공정한 해결책,하지만 왜 처음에는이 일을하고 싶습니까? –

+0

@Pekka 웃다. 도대체 누가 알지. 하하 그들은'나는 기존의 html 문서가있다 '고 말했기 때문에 왜 HTML을 변경하지 않는지 확신 할 수 없다. – Ian

+0

빠른 답장과 의견을 보내 주셔서 감사합니다. 실제로해야 할 일은 모든 h1 태그의 제목 TOC 생성에 필요한 스크립트는 h1 태그에 고유 ID가있는 경우에만 작동합니다. – ManUO

0

사용 querySelectorAll()이 헤더의 모든 요소, 다음 반복 얻을 수 각 요소에 대한 고유 한 ID를 생성합니다.

var headerElements = document.querySelectorAll('h1'); 
for(h in headerElements) { 
    if(headerElements[h] instanceof Element) { 
     headerElements[h].id=uniqueIDgenerator(); 
    } 
} 
+0

난 그냥 Mac에서 파이어 폭스에서 성공없이 위의 노력했다. 나는 html head 섹션 내에서 위 코드를 먼저 사용했다. 그리고 body 요소 내부에서 성공하지 못했다. 내가 뭔가 잘못하고 있는거야? – ManUO

+0

보통 for 루프를 사용하여 인덱스를 반복 할 수있을 때 왜 for for 루프를 사용하고'instanceof Element'를 검사해야합니까? – Ian

+0

@Ian 이것은 jQuery없이 어떻게하는지 알 수있는 방법입니다. 대체 답변을 게시하실 수 있습니다. 더 쉬운 방법을보고 싶습니다. @ManUO 나는 왜 그것이 당신을 위해 일하지 않는지 잘 모르겠습니다. 게시하기 전에 FF로 테스트했습니다. 자리 표시 자 함수'uniqueIDgenerator()'를 고유 한 ID를 생성하는 데 사용하려는 것으로 바꾸어야합니다. –

관련 문제