2012-03-25 4 views
0

내 응용 프로그램에서 사용자의 브라우저가 HTML5-capable이고 입력 필드에 placeholders (Modernizr 사용)을 표시 할 수 있는지 확인합니다. 그렇다면 자동화 된 방식으로 HTML 문서에서 labels을 모두 제거하려고하지만 실제로 어떻게해야할지 모릅니다. 평신도 측면에서JavaScript의 모든 레이블 요소 제거

, 사용자의 브라우저가 자리를 지원하는 경우,이를 설정하고 싶습니다 :이 -in마다 속으로

<label for="email"> 
    Email: 
</label> 
<input type="email" id="email" placeholder="Your email"> 

는 occurrence- :

<input type="email" id="email" placeholder="Your email"> 

내가 가진 모든 것입니다 :

if (Modernizr.input.placeholder) { 
    // Remove all labels from the HTML document 
} 

지금까지 id을 라벨에 할당하고 하나씩 삭제했지만 그것을하는 더 효과적인 방법 같이. 여기

$('label').remove(); 

예 - 효과 확인하기 위해 자바 스크립트 부분에 한 줄의 주석 :

당신이 jQuery를 사용으로 OK 경우
+10

하지 마세요! 사양에서 * "자리 표시 자 속성을 레이블 대신 사용할 수 없습니다."* 레이블을 제거하면 사람들이 올바른 필드에 올바른 값을 넣었는지 확인할 수 없음을 의미합니다 (특히 auto - 완성), 화면 판독기를 사용하는 사람이 현장에 입력해야 할 내용을 알기가 극도로 어렵거나 불가능할 것입니다. 예를 들어 좋은 자리 표시자는 "귀하의 이메일"이 아닌 "[email protected]"이됩니다. – Quentin

+0

@Quentin. 그것은 답이되어야합니다. 내가 그 대답을 upvote – Ben

+1

@ 벤 - 나는 그것이 좋은 조언이라고 생각하지만, 그것은 질문에 대답하지 않습니다. – Quentin

답변

2

이는 한 줄입니다

+0

고마워, 완벽하게 작동했습니다! 비 jQuery 응답도 효과가 있었지만 다소 더러워졌습니다. – federicot

+0

도움을 주어 기쁩니다. –

+1

jQuery 라이브러리가 제공하는 32KB의 축소 및 압축 된 JavaScript를 볼 수 없기 때문에 non-jQuery는 더 복잡해 보입니다;) – Quentin

4

먼저 기존 레이블을 다음과 같이 작성하십시오.

var labels = {}, tags = document.getElementsByTagName('label'), l = tags.length, i; 
for(i=0; i<l; i++) labels[tags[i].getAttribute("for")] = tags[i]; 

다음으로 자리 표시자가있는 입력 요소를 찾으십시오. ID가있는 사용자의 경우 해당 레이블을 찾아서 제거하십시오.

tags = document.getElementsByTagName('input'); 
l = tags.length; 
var lb; 
for(i=0; i<l; i++) { 
    if(!tags[i].getAttribute("placeholder")) continue; 
    if(lb = labels[tags[i].id]) lb.parentNode.removeChild(lb); 
} 

완료! jQuery가 필요하지 않습니다! (실제 JS에서 실제로 할 수 있기 때문에 ...)

+0

작동하지 않습니다 - //jsfiddle.net/geotheory/mst9bjwu/ – geotheory

+0

@geotheory이 코드는 라벨을 지우는 데 사용됩니다. 목록이 아닙니다. 동일한 카테고리의 "제거"코드에서 원격으로 코드를 무작위로 복사하여 작동한다고 가정합니다. –

+0

그러면 해결책에이 질문의 제목이 반영되지 않고 사람들의 시간을 낭비 할 것입니다. – geotheory