2012-03-25 19 views
0

私のアプリケーションでは、ユーザーのブラウザがHTML5-capableであるかどうかを確認し、placeholdersを入力フィールドに表示できます(Modernizrを使用)。もしそうなら、私はすべてのlabelsをHTML文書から自動化された方法で取り除きたいと思っています。素人用語で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をラベルに割り当てて1つずつ削除しましたが、より効率的なやり方のように。

+10

Do not do that!仕様から*「プレースホルダ属性をラベルの代替として使用してはいけません」*ラベルを削除すると、人々は正しい値を正しいフィールドに入れているかどうかをチェックできなくなります(特にauto画面リーダーを使用している人がフィールドに入力する内容を知ることは非常に困難または不可能になります。 (あなたの例のための良いプレースホルダは "あなたの電子メール"ではなく "[email protected]"でしょう。) – Quentin

+0

@Quentin。それは答えでなければなりません。私はその答えをアップヴォートするだろう – Ben

+1

@ベン - 私はそれが良いアドバイスだと思うが、それは質問に答えることはできません。 – Quentin

答えて

2

あなたはjQueryのを使用してOKであれば、これはワンライナーです:ここ

$('label').remove(); 

例 - 効果を確認するためにJavaScript部分に1行のコメントを解除:

+0

ありがとう、それは完璧に働いた!非jQueryの回答もうまくいきましたが、もう少し面倒です。 – federicot

+0

喜んで助けてください! –

+1

jQuery以外のものは、jQueryライブラリによって提供される32KBの縮小され圧縮されたJavaScriptを見ることができないので、もっと乱雑に見えます; – 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

関連する問題