2011-10-24 16 views
5

Tengo algunos problemas para obtener una de las páginas de mi sitio con IE8. Funciona bien en IE9, Safari (ambos PC & Mac) & Firefox (Mac). Estoy usando una secuencia find(tag1).html(tag1) llamada a hacer un cambio de título, pero me sale el siguiente error en IE8 cuando depurarlo en el depurador de scripts IE, y esto en la función html(tag2):jQuery .find() error: "Llamada inesperada al método o acceso a la propiedad"

Unexpected call to method or property access

La función find(tag1) parece para devolver el objeto adjunto (es decir, #sidebar), en lugar del objeto anidado #sidebarheader, y esto causa problemas cuando se realiza la llamada html(tag2).

He creado un caso de prueba representativa de la siguiente manera:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>JQuery .find() test case</title> 

    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.js"></script> 
    <script type="text/javascript"> 
     function UpdateHeader() { 
      $('#sidebar').find('header').html("New Title"); // IE8, nesting div's in the find fct. will not discover the child div 
     } 

     document.ready = UpdateHeader; 
    </script> 
</head> 

<body> 
     <div style="height: 400px; width: 390px"> 

      <div id="jqm-home"> 
      <div id="page"> 
       <div id="sidebar"> 
        <div id="sidebarheader"> 
         <header>Old Title</header> 
        </div> 
       </div> 
      </div> 
      <p onclick="UpdateHeader();">Click to update title</p> 
      </div> 
     </div>  
</body>    
</html> 

Y aquí está el caso de prueba jsFiddle:

http://jsfiddle.net/bnmcK/21/

Alguien ha una sugerencia sobre cómo conseguir que esto funcione en IE8?

Respuesta

1

<encabezado> es una etiqueta HTML5, que IE8 no conoce (IE9 sin embargo, admite esta etiqueta). Dado que está declarando la transición de XHTML 1.0, le sugiero que use una etiqueta <h1>, que funcionará bien en IE8.

4

Para soportar los nuevos elementos de HTML 5 en versiones anteriores de IE (8 y siguientes), hay un truco útil, que implica la creación de un elemento ficticio antes de ejecutar el script.

Por lo tanto, simplemente llamando document.createElement('header'); en su página resolverá el problema, consulte here.

Para una explicación completa, this post hace un buen trabajo al proporcionar una explicación.

También, html5shiv es un proyecto que resuelve este problema para otros elementos también.

Cuestiones relacionadas