jQuery .find()错误:“对方法或属性访问的意外调用”

时间:2011-10-24 19:53:53

标签: javascript jquery internet-explorer-8

我在使用IE8获取其中一个网站页面时遇到了一些问题。它适用于IE9,Safari(包括PC和Mac)和它们。 Firefox(Mac)。我正在使用find(tag1).html(tag1)调用序列进行标题替换,但是当我在IE脚本调试器中调试它时,我在IE8中收到以下错误,这在html(tag2)函数中:

  

意外调用方法或属性访问

find(tag1)函数似乎返回封闭对象(即#sidebar),而不是嵌套对象#sidebarheader,这会在以后进行html(tag2)调用时导致问题

我创建了一个代表性的测试用例如下:

    <!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>

这是jsFiddle测试用例:

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

有人建议如何在IE8中使用它吗?

2 个答案:

答案 0 :(得分:4)

为了支持旧版IE(8及以下版本)中的新HTML 5元素,有一个方便的技巧,包括在运行脚本之前创建一个虚拟元素。

因此,只需在页面中调用document.createElement('header');即可解决问题,请参阅here

要获得完整的解释,this post可以很好地提供解释。

此外,html5shiv也是一个解决其他元素问题的项目。

答案 1 :(得分:1)

&LT;报头GT;是一个HTML5标记,IE8不知道(IE9支持此标记)。由于您宣布XHTML 1.0过渡,我建议使用&lt; h1&gt;相反,它可以在IE8中正常工作。