1

target="_blank"チェックボックスのクリックに応じて、ページのリンクに追加しようとしています。

私が持っているJavaScript側で:

 function newTab(v) {
      if(v.tab.checked == true) { 
        document.getElementsByTagName('a').setAttribute('target', '_blank');
      } else {
        document.getElementsByTagName('a').setAttribute('target', '_self');
      }
  } //end function

そして、HTML側には次のものがあります:

<form>
    <input type="checkbox" name="tab" onclick="newTab(this.form)" />
    <label>Open Links In New Tab?</label>
</form>

<a href="//mail.google.com">Gmail</a>

当然、思ったほど単純ではないので、うまくいきません。

ページには十数個のリンクが含まれているため、ページ上のすべてのリンクに適用するチェックボックスが必要getElementsByTagName()です。どんな助けでも大歓迎です!

編集:

動作するコードは次のとおりです。

  function newTab(f) {
    var els = document.getElementsByTagName('a'); //read anchor elements into variable
    if(f.tab.checked == true) { //If the box is checked.
      for (var i in els) {
        els[i].setAttribute('target', '_blank'); //Add 'target="blank"' to the HTML
      } 
    } else { // not checked...
      for (var i in els) {
        els[i].setAttribute('target', '_self'); //Add 'target="self" to HTML
      }
    }
  } //end function. 
4

1 に答える 1

4

getElementsByTagName()ノードセットを返します。それを反復して、それぞれに変更を順番に適用する必要があります。あなたが現在持っているのは、これを内部的に処理する jQuery 構文に似ています。

これはコンソールに表示されます。JS の問題については、何が問題なのか疑問に思う前に、常にコンソールを確認してください。

var els = document.getElementsByTagName('p');
for (var i=0, len = els.length; i<len; i++)
    els[i].setAttribute('name', 'value');

また、チェックボックスでは、マウスではなくキーボードを介して切り替える可能性があるため、クリックイベントではなく変更を使用します。最後に、HTML で指定されたインライン DOM ゼロ イベントではなく、イベントを一元的に処理することを検討する必要があります。この質問の範囲を超えている多くの理由があります。

于 2012-08-13T11:31:09.160 に答える