これは私のjavascriptクラスの1つのコードです:
function Foo(text)
{
var container = document.createElement('span');
container.innerHTML = text;
$("#fooContainer").append(container);
this.select = function()
{
$(container).addClass('selected');
}
this.getContainer = function()
{
return container;
}
this.getText = function()
{
return text;
}
}
各ページの読み込み時に、次のことを行います。
var fooList = {};
fooList['foo1'] = new Foo('Foo 1');
fooList['foo2'] = new Foo('Foo 2');
fooList['foo3'] = new Foo('Foo 3');
これにより、各オブジェクトのスパンがfoo
正しく作成され、domで次のようになります。
<div id="fooContainer">
<span>Foo 1</span>
<span>Foo 2</span>
<span>Foo 3</span>
</div>
ただし、これを行うと:
fooList['foo1'].select();
次に、次のようになります。
<div id="fooContainer">
<span>Foo 1</span>
<span>Foo 2</span>
<span class="selected">Foo 3</span>
</div>
期待されるものではなく、これは次のとおりです。
<div id="fooContainer">
<span class="selected">Foo 1</span>
<span>Foo 2</span>
<span>Foo 3</span>
</div>
container
すべてのオブジェクトのオブジェクトが最後のfooのコンテナー(この場合はfoo 3)を指しているようfoo
です。さらにテストするために、次のようにしました。
for (var key in fooList)
{
console.log(key);
console.log( fooList[key].getText() );
console.log(fooList[key].getContainer() );
}
これにより、これがfirebugコンソールに記録されます(最初のfooに対してのみ表示されます)。
foo1
Foo 1
<span>
スパンをクリックすると、firebugで、予想どおり1番目または2番目ではなく、3番目のスパンを指します。
私が間違っていることについて何か考えはありますか?スパンにIDを設定する必要がありますか?