2011-08-04 7 views
0

がコンテンツをロードし、私はから機能を変更しなければならなかったPrototypeJS Element.prototype.appendChild問題

document.observe('click', function(e, el) { 
    if (el = e.findElement('.userListHeaderCell.sortable')) { 
     el.toggleClassName('desc');   
     var colnumber = el.up().childElements().indexOf(el);   
     var content = el.up(2); 
     sortColumn(content, colnumber, el.hasClassName('desc')); 
    } 
}); 

sortColumnは、次のようになります。

function sortColumn(content, colnumber, desc) {  
    content.select('.userListRow').sort(function(a,b){   
     var atext = a.down(colnumber).innerHTML.stripTags().toLowerCase();   
     var btext = b.down(colnumber).innerHTML.stripTags().toLowerCase();   
     return atext.localeCompare(btext) * (desc ? -1 : 1);  
    }).each(Element.prototype.appendChild, content); 
} 

トグルとコルナンバーの仕事とコンテンツはオブジェクトHTMLDivElementですが、コンテンツ変数を変換するか、anotheを使用する必要があるようですr関数ではなく、sortColumnに何が入っているのかわかりません。私が手にエラーがある:

"JavaScriptの引数を変換できませんでした" nsresult: "0x80570009(NS_ERROR_XPC_BAD_CONVERT_JS)" 場所: "JSフレーム:: https://www.someurl.com/scripts/prototype.js :: ::ライン804" のデータ:何なし]

私はこの仕事をするために変更する必要がありますか?

ありがとうございました。

EDIT:IEで

エラーが表示さ:プロパティの値を取得する はできません「と呼ぶ」:オブジェクトがnullまたは未定義prototype.jsのある、ライン804文字を9

私は問題がであると信じてElement.prototype.appendChild

Element.extend(content)を追加しようとしましたが、役に立たないようです。

例データ:

<div id="contentbox_Users" class="userList"> 
    <div class="userListHeader"> 
     <div class="userListHeaderCell col1 sortable">First Name</div> 
     <div class="userListHeaderCell col2 sortable">Last Name</div> 
    </div> 
    <div id="contentbox_People"> 
     <div class="userListRow"> 
      <div class="userListCell col1">John</div> 
      <div class="userListCell col2">Smith</div> 
     </div> 
     <div class="userListRow"> 
      <div class="userListCell col1">Bob</div> 
      <div class="userListCell col2">Ray</div> 
     </div> 
     <div class="userListRow"> 
      <div class="userListCell col1">Fred</div> 
      <div class="userListCell col2">Jones</div> 
     </div> 
    </div> 
</div> 
+0

HTMLがなければ、スクリプトが正しい要素を選択しているかどうかを判断するのは難しいです。このようなエラーは通常、要素が見つからないことを意味します。 –

+0

HTMLを投稿していただき、ありがとうございます。 – fanfavorite

+0

"desc"のCSSに境界を設定し、クラス名が追加されたときに選択されている要素を確認します。何が起こっているのが分かるかが分かります。 –

答えて

1

それは私がやってみるべきで失敗している私のコードですので。

ライン、

}).each(Element.prototype.appendChild, content); 

}).each(function(row) { 
    content.appendChild(row); 
}); 

あなたは物事が優れているかどうかを確認するためにそのように試みることができる、というのが簡単な方法です。私はエラーを認識しませんが、速いgoogleはFirefoxからのもので、非要素を期待するネイティブ関数に渡すことに関連しています。このような状況では、私はconsole.log(...)の呼び出しをどこにでもぶつけて(そしてFirefoxではF12を押して)何が起こるのかを見てみる傾向があります。配列をログに記録すると、すべての行がHTML要素として表示されます。

+0

ありがとうございます、それは動作していますが、行をcontentbox_Usersと同じレベルに置いています。私はそれを修正することができます。 – fanfavorite