Estoy usando la Autocompletar de jQuery UI con un origen de datos local (source: myArray
). Quiero que el autocompletar proponga solo los resultados que comienzan con la cadena ingresada en lugar del insensible a mayúsculas/minúsculas contiene búsqueda. ¿Hay una solución simple para esto o tengo que proporcionar mi búsqueda personalizada/devolución de llamada de origen?jQuery UI Uso de autocompletar startsWith
Respuesta
Actualmente lo he hecho de esta manera, no estoy seguro si hay una solución mejor:
source: function(request, response) {
var filteredArray = $.map(orignalArray, function(item) {
if(item.value.startsWith(request.term)){
return item;
}
else{
return null;
}
});
response(filteredArray);
},
Este enfoque también hizo posible imponer un límite (por ejemplo, 10 elementos) de la cantidad de elementos para ser mostrado.
No soy de ninguna manera un experto en estas cosas, pero puedo imaginar un algoritmo de coincidencia de cadenas como Aho -Corasick puede ayudar. – Huppie
Antes de malinterpretar mi comentario anterior. La implementación de cadenas que coincidan solo debe hacerse cuando el rendimiento es absolutamente crítico Y un generador de perfiles muestra que su solución actual es el cuello de botella. Hasta entonces, usa la solución que tienes ahora. La legibilidad de su código supera los beneficios de rendimiento en este caso :) – Huppie
Su propuesta sobre el algoritmo de coincidencia de cadenas también significa un método de devolución de llamada personalizado como el anterior (si no estoy equivocado). Puede ser interesante en algunos casos particulares como dices, aunque el UI Autocompletar ya implementa una búsqueda decente (con contiene). Por ahora me quedaré con mi implementación (solo recibí 3k elementos de 4chars cada uno). – Bart
source: function(request, response) {
var t = jQuery.grep(t, function(a){
var patt = new RegExp("^" + request.term, "i");
return (a.match(patt));
});
response(t);
},
Supongo que necesita ser beo patt.test en lugar de match. – toy
Lo he notado ahora también. O tiene que ser un .match (patt). No sé cómo/por qué funcionó antes, pero Sí. –
¿Qué pasa si quiero obtener palabras que termine? Con probé esta expresión regular, var patt = new RegExp ("\\>" + request.term, "i"); pero no funcionó, por cierto, ¿qué significa el segundo parámetro para la función RegExp llamada "i"? – Tarek
Ingresé al código Jqueryui y lo cambié allí.
Si nos fijamos en la sección de auto completo, verá la línea siguiente:
filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i")
modificarla a la siguiente (cuidado, esto es un cambio global):
filter:function(a,b){var g=new RegExp("^" + d.ui.autocomplete.escapeRegex(b),"i")
Aquí está una forma ligeramente diferente de hacer una búsqueda sensible a mayúsculas y minúsculas. Tenga en cuenta la falta de "i" en la creación de la expresión regular en el segundo ejemplo, que es lo que causa la insensibilidad de mayúsculas y minúsculas en la implementación predeterminada.
casoinsensible:
$('#elem').autocomplete({
source: array
});
entre mayúsculas y minúsculas:
$('#elem').autocomplete({
source: function(request, response) {
var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term, ""));
var data = $.grep(array, function(value) {
return matcher.test(value.label || value.value || value);
});
response(data);
}
});
ver esto:
de ajuste de palabra de inicio:
http://blog.miroslavpopovic.com/jqueryui-autocomplete-filter-words-starting-with-term
Anula el método de filtro de autocompletar. Yo uso esto y funciona bien.
// Overrides the default autocomplete filter function to search only from the beginning of the string
$.ui.autocomplete.filter = function (array, term) {
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(term), "i");
return $.grep(array, function (value) {
return matcher.test(value.label || value.value || value);
});
};
palabra partido:
Partido startsWith de cualquier palabra de la cadena.
p. Ej."LHR Londres" se corresponde con
var matcher = new RegExp("\\b" + $.ui.autocomplete.escapeRegex(term), "i");
\ b Posición afirman en un límite de palabra (^ \ w | \ w $ | \ W \ w | \ w \ W) "londres"
que pueda utilizar la misma manera en Jquery UI Autocomplete Examples
<script>
$("#autocompleteInputField").autocomplete({
source: function(request, response) {
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
response($.grep(myArray, function(item){
return matcher.test(item);
}));
}
});
</script>
O otra manera con el uso de $.map
método no $.grep
<script>
$("#autocompleteInputField").autocomplete({
source: function(request, response) {
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term), "i");
response($.map(myArray, function(item) {
if (matcher.test(item)) {
return (item)
}
}));
}
});
</script>
- 1. Uso de HTML en jQuery UI autocompletar
- 2. JQuery UI Autocompletar Posición
- 3. jQuery UI autocompletar - renderItem
- 4. jquery ui autocompletar, preguntas css
- 5. JQuery UI Autocompletar (1.8) desplazamiento
- 6. jQuery UI Autocompletar con categorías
- 7. jQuery UI autocompletar con JSON
- 8. jQuery UI autocompletar mal posicionamiento
- 9. jQuery UI Autocompletar DownArrow UpArrow
- 10. jQuery UI autocompletar actualización de datos
- 11. Detección de autocompletar de jQuery UI
- 12. jQuery UI Autocompletar: desencadenar una búsqueda Desde fuera de autocompletar
- 13. Haciendo el widget Autocompletar de jQuery UI * en realidad * autocompletar
- 14. jQuery UI Autocompletar No filtrado de datos
- 15. JQuery UI Autocompletar devolución de llamada
- 16. jQuery Autocompletar no aparece
- 17. Jquery UI autocompletar; minLength: 0 número
- 18. JQuery UI Autocompletar mostrando como viñetas
- 19. JQuery UI autocompletar con json y ajax
- 20. jQuery UI autocompletar: Obtener referencia al ul
- 21. jQuery UI Autocompletar con los valores
- 22. jquery ui autocompletar combobox con categorías
- 23. jQuery UI autocompletar con elemento e id
- 24. jquery-ui autocompletar no selecciona ingrese
- 25. Jquery UI autocompletar IE 7 problema
- 26. Formato JSON para jQuery UI Autocompletar
- 27. jQuery UI Autocompletar autoenfoque no funciona
- 28. jQuery UI autocompletar añadiendo un lapso
- 29. Buena jQuery Autocompletar que no forma parte de jQuery UI?
- 30. jQuery UI Autocompletar: ¿Desactiva la finalización de la pestaña?
Respuesta relacionada: http://stackoverflow.com/questions/2382497/jquery-autocomplete-plug-in-search-configuration – sina