選択したセレクタ:どのように私はjQueryのをスピードアップすることができますか?

StackOverflow https://stackoverflow.com/questions/541236

質問

私はそれで3830個の要素を持つWebページのドロップダウンを持っています。私は、過度のが、何を知っています。

jQueryのでは、私は文を使用して、選択したオプションの値を取得します:

$( "#institutionCombo:選択").val();

選択が発見される前に、

目立つ一時停止があります。私はその値を取得したら、私は、ページ上のテキストボックスに挿入し、私はどれだけ速く知っています。プラス私はFirebugの中にブレークポイントを使用して、それをチェックしました。

私は古い学校に行くと、このJavaScriptを使用している場合:

VAR DIV =のdocument.getElementById( "maindiv");
varが( "選択")= div.getElementsByTagNameを選択[0];
VAR IX = select.selectedIndex;
VAR instId = select.options [IX] .VALUE;

この速度はinstananeousです。

になりjqueryの中で継承何かがあります:数値が高すぎる取得するときに選択したセレクタとても遅いですか?私はjqueryの内の選択オプションを見つけるスピードアップするために、誰もが提案を持っていない、私のスクリプトで全体のjQueryに固執したい?

おかげで、

クレイグ

役に立ちましたか?

解決

を呼び出す必要はありません:選択ボックスのヴァルを取得するときに選択します。

デフォルトの動作は、selectedIndexのを取得することです。

$( "#institutionCombo").val();

コメントで述べたように、あなたが使用できるオプションのテキストにアクセスする必要がある場合は、

$( "#institutionCombo option[value=" + $( "#institutionCombo").val(); + "]").text();

あなたが知っている場合は、テキストプロパティとあなただけの直接のselectedIndexを使用する場合があります値からの異なるが必要もののます。

var combo = $("#institutionCombo").get(0); 
combo = combo ? combo : {selectedIndex: -1}; // handle no combo returned
if (combo.selectedIndex < 0)
  return; // nothing selected
$('#institutionCombo option:eq(' + combo.selectedIndex + ')').text()

ここでjqueryのソース(V1.3)からの抜粋である

val: function( value ) {
    // ...  
    // We need to handle select boxes special
    if ( jQuery.nodeName( elem, "select" ) ) {
        var index = elem.selectedIndex,
            values = [],
            options = elem.options,
            one = elem.type == "select-one";

        // Nothing was selected
        if ( index < 0 )
            return null;

        // Loop through all the selected options
        for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
            var option = options[ i ];

            if ( option.selected ) {
                // Get the specifc value for the option
                value = jQuery(option).val();

                // We don't need an array for one selects
                if ( one )
                    return value;

                // Multi-Selects return an array
                values.push( value );
            }
        }

        return values;  
    // ...  
},

を呼び出すとき:すべての選択要素をループを行っている選択したセレクタを設定すると、いずれかの配列を返します.selectedプロパティを探してdecendents。それはループすべてdecendentsが、これこれをしないだろう、あなたがこれを行ういずれかの方法でます。

他のヒント

あなたはこれを行うことができます:

VAR IX = $( "#institutionCombo").ATTR( "selectedIndexの");

のvar値= $( "#institutionComboオプション:EQ(" + IX + ")").val();

しかし、それはあなたがあなたの古い学校のコードでやっていることを効果的です。

私は、私が上記のやってることはjQueryのコードがためにやっていることであると考えているだろうので、私は、顕著な遅延があることを驚いている:選択したセレクタ

そうでなければ、私はそれが遅延を引き起こしている構文エラーであれば、あなたはおそらく

をやるべきだろう

$( "#institutionComboオプション:選択").val();

(ノートオプション:対選択:選択)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top