2013-06-08 4 views
6

を削除:javascriptの代わりに - 全体のdivの、私の質問はかなり基本的ですが、私は理由を理解していない、次のコードでは、ボタンの上だけボタン。消えるをクリックして要素

<script> 
    function remove(id) { 
     //get the element node 
     element = document.getElementById(id); 

     //remove the element from the document 
     document.removeChild(element); 
    } 
</script> 

<div id="intro" class="jumbotron"> 
    <h1>Your Offline Web Dictionary!</h1> 
    <p class="lead"> 

    <div class="controls"> 
     <input class="span7 " type="text" placeholder=" " name="key"> 
    </div> 
    <div> 
     <button class="btn btn-large btn-success" onclick="remove(intro)"> 
      Dictionary Search 
     </button> 
    </div> 
</div> 

JSFiddle

答えて

4

ボタンの要素にはremoveプロパティがあり、remove関数の代わりに呼び出されるという問題があります。ストリングのことも。

<button class="btn btn-large btn-success" onclick="window.remove('intro');console.log(this.remove);"> 
    Search 
</button> 

http://jsfiddle.net/HMEVd/76/

+0

+1はい、かなり良い説明です。どうもありがとう!!私は数分以内にそれを受け入れます。 – JosephConrad

+0

なぜボタンの 'remove'が呼び出されるのですか?何か暗黙の 'with'が動作していますか?そして、この 'remove'はどこから来ていますか?これは指定されたDOMメソッドではありません。 –

+0

まあ、私はこの行動をしばらく前に見て、本当にそれに疑問を呈したことはありません。 – Musa

1

introはすなわち、'intro'

また、あなたはあなたの関数の名前を変更する必要があり、例えば、removeByIdの代わりに、、文字列ではなく変数として関数に送られるべきです。その後、それは完全に動作します。

実際にはremoveの機能が全く異なります。 (あなたがそれに警告メッセージを入れて見ることができるようにそれがremove命名されたときに、あなたの関数であっても起動されません。)

function removeById(id) { 
     //get the element node 
     element = document.getElementById(id); 

     //remove the element from the document 
     document.removeChild(element); 
} 

... 
<button class="btn btn-large btn-success" onclick="removeById('intro')"> 
+0

http://jsfiddle.net/HMEVd/70/ – Musa

+0

このOPは、引用された症状を説明していません:「ではなく、全体のdivを、ボタンクリックだけボタン。消えるの」*を* –

2

2つの問題。まず、introは識別子ではなく文字列でなければならないので、あなたのonclickにremove('intro')を使用してください。

第2に、document.rwmoveChildが間違っています。 removeChildは、削除する要素の親に対して呼び出す必要があります。

element.parentNode.removeChild(element); 
+0

全く正しいですが、OPが尋ねた質問には答えません:なぜボタンが消えていないのですか? –