Javascriptライブラリを使用してWebサイトを作成しています。ユーザーがドロップダウン(選択)ボックスでオプションを選択した場合、ラベルとテキストボックスを追加する必要があります。これはappendChildオプションで行います。 appenChildオプションの唯一の問題は、アイテムが使用済み要素のアイテムの後に常に追加されることです。これは私のコードです:
var newFreeformLabel = document.createElement('label');
newFreeformLabel.innerHTML = 'Omschrijving:';
var newFreeformField = document.createElement('input');
newFreeformField.className = 'textfield';
newFreeformField.name = 'factuur_orderregel[]';
var newFreeformSpacer = document.createElement('div');
newFreeformSpacer.className = 'spacer';
container.appendChild(newFreeformLabel);
container.appendChild(newFreeformField);
container.appendChild(newFreeformSpacer);
ここで、コンテナはアイテムを追加する必要がある要素です。唯一の問題は、アイテムが要素の最後に追加され、html要素の最初にアイテムを追加することです。
appendChild
に加えて、DOMノードには insertBefore メソッドがあります
container.insertBefore(newFreeformLabel, container.firstChild);
Element.insert(element、content) を使用します。
_container.prepend(newChild);
_
これはES5で追加されました。これはVanilla JSで、現在、Chrome、FF、Operaを含む ブラウザの90% で利用可能です。
さらに、newFreeformLabel.after(newFreeformField);
を使用すると、必要に応じて順番に挿入できます。 _.before
_もオプションです
リンク: developer.mozilla.org - Polyfill
container.
insert({
// key is position
// 'before', 'after', 'top' and 'bottom' are allowed
top: new Element('label').
update('Omschrijving:')
}).
insert({
top: new Element('input').
addClassName('textfield').
writeAttribute('name', 'factuur_orderregel[]')
}).
insert({
top: new Element('div').
addClassName('spacer')
});
ただし、PrototypeのElement.insert
はbefore
/after
にとってはやや不自然だと思います。たとえば、後のコードで.spacer
の前に.textfield
を配置する場合は、次のようにする必要があります。
container.
down('.textfield').
insert({
before: new Element('div').
addClassName('spacer')
});
これは、特にDOM APIのElement.insertBefore
に精通している場合、直感的ではないため、not.spacer
を.textfield
に挿入しますが、代わりにcontainer
に、前.textfield
に。
ガレスのソリューションを時間通りに見ていたら、私はそれを使っていたので、それで行くかもしれません:
$('toggle_product').innerHTML = insertContent + $('toggle_product').innerHTML;
prototypesのinsert()関数がIE8でエラーを返していたため。