2011-07-17 11 views
0

このパターンについて多くの投稿がありましたが、それがなぜ鉱山コードで動作しないのかはまだ分かりません。 Ubuntu 10.04でChromiumを使用する。innerHTMLパターンが正常に動作しない

function showDescription(){ 
    var description = document.createElement('div'), 
    eventTarget = window.event.target, 
    newHTML = description.innerHTML; 

    description.id = 'description'; 

    switch(eventTarget.getAttribute('data-par')){ 
     case 'links': newHTML = newHTML.replace(newHTML, 'links') 
      break; 
     case 'images': newHTML = newHTML.replace(newHTML, 'images') 
      break; 
    }; 
    console.log(newHTML); 
    parentElement.insertBefore(description, parentElement.firstChild.nextSibling); 
}; 

    var descParLi = descPars.getElementsByTagName('li'); 
    for (var i = 0; i < descParLi.length; i++){ 
    descParLi[i].addEventListener("click", showDescription); 
}; 

このコードは他の機能に含まれています。不思議なことに、コンソールではnewHTMLの価値が見えますが、htmlには変更がありません。それは問題です。なにが問題ですか?直し方?

+0

「window.event」は、Internet Explorerでのみ有効です。 "addEventListener()"(これは興味深いことに、Internet Explorerでは**動作しない**)で追加すると、イベントオブジェクトは関数の最初のパラメータとして渡されます。 – Pointy

+0

あなたはそれのための小さなフィドルを作成できますか? – ChristopheCVB

+2

@Pointy:奇妙なことに、私はChromeを、ハンドラへの引数に加えて、 'event'を' window'のプロパティにすることでIEを模倣しています。 http://jsfiddle.net/SdMX9/ – user113716

答えて

2

あなたが作成した実際のdivにコンテンツを追加していません。

newHTML = description.innerHTML 

...か:何やってのポイントはありません

switch(eventTarget.getAttribute('data-par')){ 
    case 'links': description.innerHTML = 'links' 
     break; 
    case 'images': description.innerHTML = 'images' 
     break; 
}; 

console.log(description.innerHTML); 

newHTML.replace(newHTML, 'images') 

が... descriptionは、ブランドの新しい要素ですので、任意のinnerHTMLプロパティがないため、コンテンツはまだありません。


編集:私は上記の変数名にdivの代わりdescriptionを使用。これは、代わりにdescriptionを使用する必要があります。

description.innerHTML = 'xxxxx' 

を修正しました。

ここでは全体の機能です:あなたのIDが毎回ユニークになるように、私はインクリメントiを追加

var i = 0; 

function showDescription(){ 
    var description = document.createElement('div'), 
    eventTarget = window.event.target; 

    description.id = 'description' + i; // <-- make the ID unique 

    i++; // <-- increment "i" so that it's different on the next run 

    switch(eventTarget.getAttribute('data-par')){ 
     case 'links': description.innerHTML = 'links' 
      break; 
     case 'images': description.innerHTML = 'images' 
      break; 
    }; 
    console.log(description.innerHTML); 

     // v----What is parentElement supposed to reference? 
    parentElement.insertBefore(description, parentElement.firstChild.nextSibling); 
} 

お知らせ。

要素を削除する前に要素を削除する必要はありません。

また、parentElementがあります。私はそれが何を参照するのか分からない。

ことが示されていないいくつかの適切な変数である場合は、罰金だが、それがtargetの親への参照する必要があります場合は、あなたの代わりにこれを行う必要があります。

target.parentNode.insertBefore(description, target.parentNode.firstChild.nextSibling); 
+0

総合的な答えをありがとう。 – I159

+0

@ I159:ようこそ。 – user113716

0

をそれはあなたのようです実際にnewHTMLをinnerHTMLの値にしたことはありません。

description.innerHTML = newHTML; 
関連する問題