2012-02-02 22 views
2

ID「headercontent」のdivがあり、ユーザーシステムでjavascriptが有効になっている場合は、ユーザーがjavascriptを有効にしていない場合に備えてnoscriptを使用したバックアップもあります。document.createElement/document.body.appendChild作成されていないdivが作成されています

コードは正常に実行され、実行時に 'a'要素が書き込まれますが、実行されるdivにコードが書き込まれないという問題があります。 'headercontent' divの外に書き出し、レンダリングされたコードで記述されていても、完全にクラスのスタイルになります。なぜなら、要素にスタイル属性を追加し、必要に応じてjavascriptで書き込むことができるからです。しかし、私はこのdivの外にコードを書く理由をより心配しています。

私のコードは次のとおりです。

<div id="headercontent"> 
    hey, this is a div. 
    <a href="#" class="button">This is a link</a> 
    <a href="#" class="button">This is another link</a> 

    <script type="text/javascript"> 
     writeask() 
     function writeask() { 
     var writeaskbox = document.createElement('a'); 
     writeaskbox.href = 'javascript:askbox()'; 
     writeaskbox.className = 'button'; 
     writeaskbox.innerHTML = 
      ['Ask'].join(' ') 
     document.body.appendChild(writeaskbox); 
     } 

     function askbox(){ 
     var askbox = document.getElementById('askbox') 
     if (askbox.style.display == 'none') { 
      askbox.style.display = 'block' 
      askbox.style.height = '150px'    
     } else { 
      askbox.style.display = 'none' 
      askbox.style.height = '0px' 
     } 
     } 
    </script> 
    <noscript><a href="/ask" class="button">Ask</a></noscript> 
</div> 

私はそれがで実行されているのと同じdiv要素で、この要素を作成するためにwriteask()関数を取得するにはどうすればよいですか?最終的な出力になるように:

<div id="headercontent"> 
    hey, this is a div. 
    <a href="#" class="button">This is a link</a> 
    <a href="#" class="button">This is another link</a> 
    <a href="javascript: askbox()" class="button">Ask</a> 
</div> 

の代わりに:私はむしろ今困惑していますので、

<div id="headercontent"> 
    hey, this is a div. 
    <a href="#" class="button">This is a link</a> 
    <a href="#" class="button">This is another link</a> 
</div> 
<a href="javascript: askbox()" class="button">Ask</a> 

私はまだJavaScriptを使用して、初心者です。誰かが助けることができれば、それはよく評価されるだろう。

ありがとうございます。ダン。代わりに、すべての

document.body.appendChild(writeaskbox); 

使用

document.getElementById("headercontent").appendChild(writeaskbox); 

答えて

3

まずの機能は、あなたがそれを他の方法で回避を行う必要があり、この場合には、その存在の前に

+0

ありがとう、私のスクリプトの順序の誤りを指摘して以来、私はあなたの答えを受け入れるでしょう。これは完全に機能しました。 –

+0

@ Shad私はそれを読み、非常にありがとう。 –

+1

@DanS関数呼び出しの順序は問題ではありません。 JavaScript関数の定義を指定されたスコープの先頭に移動します。 – Shad

3

、あなたはwriteask()を呼び出しています。それは

document.getElementById("headercontent").appendChild(writeaskbox); 
+0

ありがとうございました! –

1

代わりの

document.body.appendChild(writeaskbox); 
でなければなりませんよう、

function writeask() {} 
function askbox(){} 

writeask(); 

、その後、あなたは身体

document.body.appendChild(writeaskbox); 

、ないのdivにそれを追加している:それはする必要があります

次の操作を行う必要があります。

document.getElementById('headercontent').appendChild(writeaskbox); 
+0

ありがとうございました! –

関連する問題