Javascript find()返回“的值”;分区;但不是为了;“主要”;元素

Javascript find()返回“的值”;分区;但不是为了;“主要”;元素,javascript,jquery,Javascript,Jquery,我有一段html(在单独的页面上,page2.php),如下所示: <html><head>...</head><body> ... <main> <div> Hello </div> <main> ... </body></html> 当我尝试此操作时,控制台显示“undefined”

我有一段html(在单独的页面上,page2.php),如下所示:

<html><head>...</head><body>
    ...
    <main>
        <div>
            Hello
        </div>
    <main>
    ...
</body></html>
当我尝试此操作时,控制台显示“undefined”

但是,当我将
find(“main”)
更改为
find(“div”)
时,控制台将“Hello”显示为类型字符串。此外,
find(“页眉”)
find(“文章”)
find(“页脚”)
等,都会在控制台上显示字符串内容

有什么独特之处可以阻止这种情况发生吗?它对HTML规范来说太新了吗

即使试图通过id定义
元素,la
也会导致控制台显示“未定义”


我正在寻找这个问题的具体答案;我不是在寻找另一种方法,例如
load()
。提前感谢。

这是html5的一项新功能。 事实上,
相同,因此您可以尝试使用
find(“#main”)
而不是
find('main')

使用
filter()
而不是
find()
作为根级元素

$()
去掉html和body标记,因此您的
main
保留在根级别


到目前为止,Chrome(v26+)和Firefox(v21+)只支持
主元素

如果您使用任何其他浏览器(或这些浏览器的旧版本)解析文档,浏览器将忽略标记,或使某些内容与之不同。解析后的文档将没有任何
main
元素,因为这些浏览器不知道任何此类元素

参考:


此外,
main
元素似乎必须位于另一个元素内,例如:

<html><head></head>
<body>
  <div>
    <main>asdf</main>
  </div>
</body>
</html>

asdf
这将找到元素,至少在Firefox25中,我在那里测试了它:

var html = '<html><head></head><body><div><main>asdf</main></div></body></html>';
alert($(html).find('main').html());
var html='asdf';
警报($(html).find('main').html());

演示:

看到Angular.js(由谷歌开发)使用任何标记名,并根据js指令找到它们,然后将它们编译成您在别处配置的模板,感到很惊讶。。。。非常酷的概念。他们建议的唯一注意事项是polyfill,因为IE非常奇怪。我还可以像你指出的那样,将
main
包装在
div
标签中,让它正常工作,但它看起来像是hack-y。尽管我在Chrome30上试过(也在HTML5上试过),你们知道为什么会有这个问题吗?我应该退回到只使用
?这是不一样的。你有消息来源吗?谢谢,这很有效!当我尝试其他一些测试时,我发现没有找到其他根级别(即
body
的直接后代),正如您所建议的。我把它改为
var myData=$(data.find('main')和我现在得到正确的HTML内容。在ajax中发送没有正文的部分内容也很常见,htis也有帮助
var html = '<html><head></head><body><div><main>asdf</main></div></body></html>';
alert($(html).find('main').html());