¿Cómo puedo acelerar jQuery: Selector seleccionado?
-
23-08-2019 - |
Pregunta
Tengo una lista desplegable en una página web con 3830 elementos en los mismos. Lo sé, pero sea cual sea excesiva.
En jQuery consigo el valor de la opción seleccionada mediante la instrucción:
$ ( "#institutionCombo: seleccionado") .val ();
Hay una pausa apreciable antes de encontrar la selección. Una vez que consiga ese valor lo inserte en un cuadro de texto en la página, así que sé qué tan rápido. Además He comprobado que el uso de puntos de interrupción en Firebug.
Si voy a la vieja escuela y uso este javascript:
var div = document.getElementById ( "maindiv");
var seleccionar = div.getElementsByTagName ( "seleccionar") [0];
var = ix select.selectedIndex;
var instId = select.options [IX] .value;
Esta velocidad es instananeous.
¿Hay algo que heredar en jQuery que hace que el selector: seleccionado tan lento cuando los números son demasiado altos? Me gustaría seguir con jQuery lo largo de mis guiones, ¿alguien tiene una sugerencia para acelerar la búsqueda de la opción seleccionada en jQuery?
Gracias,
Craig
Solución
No hay necesidad de llamar al: seleccionado al conseguir el val de un cuadro de selección
.El comportamiento por defecto es conseguir que el selectedIndex
$( "#institutionCombo").val();
Como se señaló en el comentario, si usted necesita para acceder al texto de esa opción que puede utilizar
$( "#institutionCombo option[value=" + $( "#institutionCombo").val(); + "]").text();
A pesar de que si usted sabe que necesita la propiedad de texto y su diferente del valor es posible que sólo desee utilizar la selectedIndex directamente.
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()
Aquí es el fragmento de la fuente de 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;
// ...
},
Cuando se llama al: Selector seleccionada que se va bucle a través de todos los elementos seleccionados decendientes en busca de la propiedad .selected que se fijen, y devolver una matriz de cualquier. De cualquier manera usted hace esto se hará en bucle todos los decendientes, así que no hacerlo.
Otros consejos
Usted puede hacer esto:
var ix = $ ( "#institutionCombo") .attr ( "selectedIndex");
valor var = $ ( "#institutionCombo opción: eq (" + ix + ")") .val ();
pero eso es efectivamente lo que está haciendo en el código de la vieja escuela.
Me sorprende que hay un retraso notable, ya que yo hubiera pensado que lo que estoy haciendo por encima de lo que es el código jQuery está haciendo por la:. Selector seleccionado
De lo contrario, me pregunto si se trata de un error de sintaxis que está causando el retraso, probablemente debería estar haciendo
$ ( "opción #institutionCombo: seleccionado") .val ();
(Opción Nota: seleccionado vs: seleccionado)