val name javascript jquery jquery-selectors sizzle

javascript - name - ¿Puedo forzar a jQuery a usar Sizzle para evaluar un selector sin utilizar selectores no estándar?



jquery selector (3)

En los navegadores modernos, jQuery utiliza document.querySelectorAll() para aumentar el rendimiento cuando se usan selectores CSS válidos. Se recurre a Sizzle si un navegador no admite el selector o el método document.querySelectorAll() .

Sin embargo, me gustaría utilizar siempre Sizzle en lugar de la implementación nativa al depurar un selector personalizado. A saber, estoy tratando de encontrar una implementación de :nth-last-child() , uno de los selectores CSS3 que no son compatibles con jQuery . Dado que este selector es compatible de forma nativa con los navegadores modernos, funciona como se describe en la pregunta vinculada. Sin embargo, es precisamente este comportamiento el que interfiere con la depuración de mi selector personalizado, así que me gustaría evitarlo.

Un truco barato que puedo usar es colocar una extensión de selector jQuery no estándar, lo que "invalida" el selector por así decirlo. Por ejemplo, suponiendo que cada li:nth-last-child(2) es visible , simplemente puedo soltar eso, convirtiendo esto:

$(''li:nth-last-child(2)'').css(''color'', ''red'');

Dentro de esto:

$(''li:nth-last-child(2):visible'').css(''color'', ''red'');

Esto hace que siempre sea evaluado por Sizzle. Excepto, esto requiere que haga una suposición de mis elementos de página que pueden o no ser cierta. Y realmente no me gusta eso. Sin mencionar, no me gusta usar selectores no estándar en general a menos que sea absolutamente necesario.

¿Hay alguna manera de omitir el método document.querySelectorAll() nativo en los navegadores que lo soportan y forzar a jQuery a usar Sizzle para evaluar un selector en su lugar, que preferiblemente no emplea el uso de selectores no estándar? Probablemente, esto implica llamar a otro método en lugar de $() , pero es mucho mejor que un selector piratear la OMI.


Como usted mismo está desarrollando el código para el selector, ¿no podría simplemente darle un nombre personalizado para la duración del ciclo de desarrollo? Tal vez darle su propio prefijo de proveedor o algo así? -bolt-nth-last-child()

De esta forma, sabrá que el navegador definitivamente no lo admitirá, por lo que siempre debería caer en el uso de Sizzle.

Cuando haya terminado con el ciclo de desarrollo, puede soltar el prefijo -bolt- .

Sé que es más una solución que una respuesta a la pregunta, pero parece ser la solución más simple para mí.



Puede establecerlo en null antes de que jQuery se cargue, por lo que cree que no es compatible:

document.querySelectorAll = null; //load jquery, will trigger not supported branch //Optionally restore QSA here (save a reference) if needed

Se supone que esto hace que esta evaluación sea false

Demostración: http://jsbin.com/asipil/2/edit

Comente la línea null y vuelva a ejecutar, y verá que se volverá roja.