Wie kann ich beschleunigen jquery: Selektor ausgewählt?
-
23-08-2019 - |
Frage
Ich habe einen Drop-Down auf einer Webseite mit 3830 Elementen. Ich weiß, übermäßige, aber was auch immer.
In jquery Ich erhalte die gewählte Option Wert mit der Anweisung:
$ ( "#institutionCombo: selected") .val ();
Es gibt eine merkliche Pause, bevor die Auswahl gefunden wird. Sobald ich diesen Wert bekommen füge ich es in ein Textfeld auf der Seite, damit ich weiß, wie schnell. Plus Ich habe überprüft, es Haltepunkte in Firebug.
Wenn ich alte Schule gehen und dieses Javascript verwenden:
var div = document.getElementById ( "maindiv");
var select = div.getElementsByTagName ( "select") [0];
var ix = select.selectedIndex;
var instId = select.options [ix] .value;
Diese Geschwindigkeit ist instananeous.
Gibt es etwas in jquery erben, die das macht: ausgewählte Wähler so langsam, wenn die Zahlen zu hoch? Ich mag mit Jquery bleiben überall in meinen Skripte, hat jemand einen Vorschlag die gewählte Option in Jquery beschleunigen zu finden?
Danke,
Craig
Lösung
Es gibt keine Notwendigkeit, das zu nennen: ausgewählt, wenn das val eine Auswahlbox bekommen
.Das Standardverhalten ist die selectedIndex bekommen
$( "#institutionCombo").val();
Wie im Kommentar erwähnt, Wenn Sie den Text dieser Option zugreifen müssen Sie verwenden können,
$( "#institutionCombo option[value=" + $( "#institutionCombo").val(); + "]").text();
obwohl, wenn Sie wissen, was Sie brauchen den Text Eigentum und seine unterscheidet sich von dem Wert, den Sie gerade möchten direkt die selectedIndex verwenden.
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()
Hier ist der Ausschnitt aus der jquery Quelle (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;
// ...
},
Wenn Sie rufen Sie den: ausgewählte Selektor, der alle Schleife durch die Auswahlelemente wird Decendents für die .selected Eigenschaft suchen festgelegt werden und wird eine Reihe von jeder zurückzukehren. Wie auch immer Sie dies tun, wird es alle Abkömmlinge Schleife, so tun dies nicht.
Andere Tipps
Sie können dies tun:
var ix = $ ( "#institutionCombo") .attr ( "selectedIndex");
var value = $ ( "#institutionCombo Option: eq (" + ix + ")") .val ();
aber, das ist effektiv, was Sie in Ihrem alten Schule Code tun.
Ich bin überrascht, dass es eine merkliche Verzögerung, da ich gedacht hätte, dass ich über das, was zu tun ist, was der jQuery-Code für das tut. Ausgewählten Selektor
Ansonsten frage ich mich, ob es ein Syntaxfehler ist, dass die Verzögerung verursacht, sollten Sie wahrscheinlich tun
$ ( "#institutionCombo Option: selected") .val ();
(Anmerkung Option: ausgewählt vs: ausgewählt)