5

これらの2つの式は同じことを行いますが、どちらがより安全またはさらに効率的ですか?

var indexedCellValue = selectedCell.srcElement.parentElement.cells[index].innerText;

var indexedCellValue = $(selectedCell.srcElement).parent('tr').get(0).cells[index].innerText;

(セル、selectedCell、親行の取得と、その親行の列へのインデックス付けの両方。)

4

3 に答える 3

4

純粋なJavaScriptは常にjQueryよりも高速ですが、jQueryを使用すると、ほとんどのブラウザーでコードが確実に機能するようになります。

于 2013-02-01T12:49:46.713 に答える
1

trjQueryでは、親を持つ要素のみを選択します。また、純粋なjavascriptバージョンはFirefox 9以降で機能すると思いますが、古いバージョンでは機能しません。

内部的には、jQueryのソースコードを見ると、parent()(バージョン1.9.0の時点で5666行目)の定義があります。

parent: function( elem ) {
    var parent = elem.parentNode;
    return parent && parent.nodeType !== 11 ? parent : null;
},

を使用していないことがわかりますparentElementparentNode、ブラウザでよりサポートされています(主に、古いバージョンのFirefoxではサポートされていません。実際、2つの違いを知りたい場合は、バージョン9より前ではサポートされていませんでした。 、この回答を参照してください:DOM parentNodeとparentElementの違い)。

また、ノードがであるかどうかもチェックしますDOCUMENT_FRAGMENT_NODE(率直に言って、私が興味を持っていることを誰かが知っている場合は、なぜそうなるのかわかりません)。

古いブラウザをサポートしていない2.0開発ブランチ(pimvdbに感謝)では、parentElementに切り替えました(トラバースモジュールの削減-commit ):

parent: function( elem ) {
    return elem.parentElement;
},
于 2013-02-01T13:30:42.547 に答える
0

これが最適化されたJQueryソリューションです

var indexedCellValue = $($(selectedCell.srcElement).parent('tr').children()[index]).text();

parentElement、cells、innerTextを使用していません。

助けてくれてありがとう。

于 2013-02-01T15:17:13.193 に答える