javascript internet-explorer dom cross-browser document.evaluate

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?




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).