2009-05-04 24 views
2

フォームのテーブル行を「上へ」および「下へ」移動する機能をセットアップしようとしています。テーブル行の数は動的です。ユーザーはボタンを押して行を追加できます。各テーブル行には複数のフィールドがあります。ヘッダー行とフッター行にはクラス名が異なるため、hasClassNameのチェックが行われます。プロトタイプ1.5.1で兄弟要素を上下に移動するにはどうすればよいですか?

私は最初にこの機能をプロトタイプ1.6で使用するために書いた後、バージョン1.5.1で動作させる必要があることを認識しました。私たちは、テストに時間がかかっているときに、最新バージョンのPrototypeにアップグレードする予定ですが、私たちのプロジェクトの現在のバージョンで動作するために必要です。

主な問題は、1.5では挿入のコンテンツとして要素を挿入できないことです。つまり、挿入したい要素のHTMLが必要です。これは要素のHTMLにアクセスすると(変数 "insertHTML")、これは元のHTMLであり、ユーザーが関連するフォーム要素に入力した情報を含まないという問題を引き起こします。

ご協力いただければ幸いです。

moveDataDef: function(num, dir) { 
    var targRow = $('dataDefItem'+num); 
    var content = targRow.innerHTML; 
    var siblings; 
    var insertHTML = targRow.inspect() + targRow.innerHTML + '</tr>'; 

    if(dir == 'up') 
     siblings = targRow.previousSiblings(); 
    else 
     siblings = targRow.nextSiblings(); 

    if (siblings[0].hasClassName('dataDefItem')) { 
     targRow.remove(); 
     if(dir == 'up') 
      new Insertion.Before(siblings[siblings.length - 1].id, targRow); 
     else 
      new Insertion.After(siblings[0].id, targRow); 
    } 
} 

答えて

1

このコードの一部を使用して、ブロックの下位ブロックを置き換えることができます。

<table id="tb1"> 
<tbody> 
<tr id="tr1"><td>1</td></tr> 
<tr id="tr2"><td>2</td></tr> 
<tr id="tr3"><td>3</td></tr> 
</tbody> 
</table> 

<script type="text/javascript"> 
/* <![CDATA[ */ 
(function(){ 
var trr3 = $('tr3'); 
var tp = trr3.parentNode; 
var trr1 =trr3.previousSiblings(); 
trr3.remove(); 
tp.insertBefore(trr3, trr1[0]); 
})(); 
/* ]]> */ 
</script> 

ありがとう:あなたが興味を持っている場合、これは私のPOCコードで、あなたの参考のため

if (siblings[0].hasClassName('dataDefItem')) { 
    var targetParent = targRow.parentNode; 
    var sibling = siblings[0]; 

    if(dir == 'up'){ 
    targRow.remove(); 
    targetParent.insertBefore(targRow, sibling); 
    } else { 
    sibling.remove(); 
    targetParent.insertBefore(sibling, targRow); 
    } 
} 

:それはネイティブのDOM機能、すなわちのinsertBefore()を使用しています。

更新:入力ミスを修正しました({'と'}がありません)。

+0

これは私のために働いていましたが、修正する必要があったif/else文にはいくつかの括弧がありませんでした。 これはPrototypeのAPIを使って書いたPrototype 1.6関数に非常に似ています。あなたのネイティブDOMコードはブラウザ間で動作しますか? –

+1

訂正していただきありがとうございます。 IE8(すべてのモード)、Firefox 3、およびSafari 4ベータ版で動作します(私のPOCスクリプト)。互換性リストについては、Peter-Paul Koch(http://www.quirksmode.org/dom/w3c_core.html)を参照してください。 – Nordin

関連する問題