javascript - document.evaluate-¿Navegador cruzado?
internet-explorer dom (3)
He estado buscando una función de selector de CSS que no sea Sizzle y he encontrado esta función .
function SparkEn(xpath,root) {
xpath = xpath
.replace(/((^|/|)/s*)([^/|/s]+)/g,''$2.//$3'')
.replace(//.([/w-]+)(?!([^/]]*]))/g, ''[@class="$1" or @class$=" $1" or @class^="$1 " or @class~=" $1 "]'')
.replace(/#([/w-]+)/g, ''[@id="$1"]'')
.replace(////[/g,''/*['');
str = ''(@//w+|"[^"]*"|/'[^/']*/')'';
xpath = xpath
.replace(new RegExp(str+''//s*~=//s*''+str,''g''), ''contains($1,$2)'')
.replace(new RegExp(str+''//s*//^=//s*''+str,''g''), ''starts-with($1,$2)'')
.replace(new RegExp(str+''//s*//$=//s*''+str,''g''), ''substring($1,string-length($1)-string-length($2)+1)=$2'');
var got = document.evaluate(xpath, root||document, null, 5, null);
var result=[];
while (next = got.iterateNext())
result.push(next);
return result;
}
Siento que es demasiado bueno para ser cierto, ¿se trata de una función solo de Firefox (xpath?) ¿O es lento? Básicamente, ¿por qué usaría Sizzle sobre esto?
Acabo de encontrar http://sourceforge.net/projects/js-xpath/ , que dice ser
una implementación de DOM Level 3 XPath para Internet Explorer 5+
Vea su implementación en http://nchc.dl.sourceforge.net/project/js-xpath/js-xpath/1.0.0/xpath.js
Es un grupo de trabajo DOM3 W3C Nota: http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226/xpath.html#XPathEvaluator-evaluate
Estado de implementación: https://developer.mozilla.org/en-US/docs/Web/API/document.evaluate#Browser_compatibility Hoy en día no solo en IE 10 en los últimos navegadores de escritorio estables.
Creo que ninguna versión estable de IE admite document.evaluate
, por lo que está limitado a cualquier otro navegador. No es lento ya que es una implementación nativa de XPath.
Sizzle es útil porque utiliza la oferta de navegadores de soporte nativo cuando está disponible (como document.getElementsByClassName ), pero vuelve a hacerlo él mismo cuando no está disponible (IE). También lo utilizan jQuery y Prototype , por lo que es muy probado y no es probable que le cause ningún problema. Sizzle también está fuertemente probado y optimizado (tienen un conjunto de pruebas de velocidad completo), que es más trabajo que no tienes que hacer.
Yo diría que vaya con jQuery, Prototype o simplemente Sizzle por sí mismo a menos que esté haciendo algo increíblemente sensible al desempeño (lo cual, honestamente, es probablemente un indicador de que ha estructurado su aplicación de manera deficiente).