2012-03-31 12 views
0

ご確認お願いします!隠し要素付きinsertHTML

HTMLタグを含む要素間で内容を交換しようとしています。私は、以下のコードがうまくいくはずだと言うと正しいと確信しています。私は正しいかどうかを知る必要があります。なぜなら、これが機能しない理由が私の考えであるとすれば、私は作成する必要があるいくつかの追加機能があるからです。

これが正しいか間違ってご確認ください:それは間違っている

<nav id="subNav" class="aniSubNavOpen drop-shadow lifted"> 
    </nav> 

答えて

1

あなたは次の2行を実行します。

var navSub = document.getElementById('subNav').innerHTML; 
var navContent = document.getElementsByClassName('pageNav')[0].innerHTML; 

あなたはこれら二つのオブジェクトからHTMLテキストを取得し、二つの変数に格納されているが。 2つの通常のJavaScript変数があり、それぞれに文字列があります。

あなたがして行うと:

navSub = navContent; 

あなただけnavSub javascriptの変数にnavContent文字列を割り当てています。 DOMには何ら影響しません。これらは2つの文字列変数です。あなたはDOMでnavSubオブジェクトの内容を変更したい場合は

、あなたがこれを行うことができます。これに

var navContent = document.getElementsByClassName('pageNav').innerHTML; 

:また

var navSubObj = document.getElementById('subNav'); 
var navContent = document.getElementsByClassName('pageNav')[0].innerHTML; 
navSubObj.innerHTML = navContent; 

を、私はこれを変更しなければならなかったことに注意してください:

var navContent = document.getElementsByClassName('pageNav')[0].innerHTML; 

getElementsByClassName()はオブジェクトではなく配列を返します(multiplicit e項目)。 getElementById()は1つのオブジェクトしか返さないので、この点に関してはgetElementById()とは異なります。

+0

うーん、妥当な音。しかし、.inner HTMLはゲッターメソッドの下にありますか?私はそれが何であるかを意味します。それは不思議なことです、プロパティへの参照をショートカットにコピーできませんか? – jAndy

+0

javascriptでは、.innerHTMLはオブジェクトのプロパティと同じように動作します。それを設定することもできますし、取得することもできます。内部的には、そのプロパティを取得または設定する際に内部的に適切な処理を行います。 '.innerHTML'プロパティ自体への参照を取得することはできません。これは、プロパティへの参照ではなく、プロパティの現在の値を取得します。 – jfriend00

+0

が正しくありません。プロパティの種類によって異なります。プロパティの後ろに 'オブジェクト 'がある場合は、もちろん参照を取得します。しかし、あなたは原始的な価値について正しいです。 – jAndy

1

:に送信

<div class="pageNav"> 
    <h1 data-title="Welcome to The Mind Company"><a>Welcome</a></h1> 
</div> 

function subNavContent () { 

    var navContent = document.getElementsByClassName('pageNav').innerHTML; 

    document.getElementById('subNav').innerHTML = navContent;} 

から呼び出します。

.innerHTMLは内部的にはsetterのようなものです。つまり、少なくともFF12の場合は、参照をコピーするときにコンテキストを失います。

これは動作します:

document.getElementById('subNav').innerHTML = navContent; 
+0

私は理解していると信じています。上記のコード変更を参照してください。 'console.log'によれば、まだ情報が渡されていないようです。 –

+0

未知の理由でクラスからIDに変更しなければなりませんでした(後で説明します)。 –

1

NavSubは、innerHTMLプロパティのテキストです。 navSubをオブジェクトにしてからnavSub.innerhtml = ...(大文字の悪い使用には申し訳ありません、私は自分の電話にいます)。あなたが私が何を意味するか分からなければ、コメントしてください。

+0

まだ問題があります。提案されたように訂正をしました(私はあなたが言っていたことを理解していると信じています)。これは私のコンソールエラーです:Uncaught TypeError: 'innerHTML'のプロパティをNULLに設定できません。 –

+0

未知の理由でクラスからIDに変更しなければなりませんでした(後で説明します)。 –

+0

imho、 "英語対数学"のように、javascriptはいくつかの人々の心と両立しません。私はその人の一人です。 jQueryが来たら、電球が消えたようなものです。私は、jQueryとFirebugの使用を必須と考えています。 :)クラス対IDの問題はあいまいさや不適切なDOMナビゲーションの問題です。ここでも、私はいつもIDを使い、クラスを信頼しない。 –