jQuery() 在 jQuery.parseHTML() 结果中找不到元素

2024-01-09

我正在使用 QUnit 编写测试并使用$.ajax()从本地运行的开发站点中提取 HTML 进行一些测试:

add_elements = function(location, selector) { 
  $.ajax(location, {async: false}).done(function(data) {
    stor.$els = $(selector, $.parseHTML(data));
    stor.$els.appendTo($('body'));
  })
}

在某个位置使用这个函数,我得到以下结果data传递给我的.done()打回来:

<!DOCTYPE html>
<html lang="en">

<head>
    <title>Home</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="/static/css/bootstrap.min.css" rel="stylesheet" media="screen">

</head>

<body>
<div id="app-container" class="container-fluid">
    <div class="page-header">
        <h1>
            <a href="/">Home</a>
            <small>Text</small>
        </h1>
    </div>

    <div id="hero-units" class="carousel-inner slide">

        <div class="hero-unit home item active">
            <h1>
                Text text text
            </h1>
            <p>
                More text!
            </p>
            <div id="app-nav">
                <a id="lets-go" class="btn btn-primary btn-large nav-forward" href="/what-up/">
                    Let's go
                </a>
            </div>
        </div>

    </div>
</div>

<script src="/static/js/jquery.js"></script>
<script src="/static/js/underscore.js"></script>
<script src="/static/js/backbone.js"></script>
<script src="/static/js/bootstrap.js"></script>
<script src="/static/js/site-fiddle.js"></script>
<script src="/static/js/site.js"></script>

</body>
</html>

一切正常,如果selector is #hero-units or .hero-unit, but $(selector, $.parseHTML(data))如果不返回任何内容selector is #app-container!我想要一个jQuery对象为div#app-container元素。

这就是杀死我的原因:

  • $.parseHTML(data) does包含div#app-container元素。只是$.parseHTML(data)[7].
  • Yet, $('#app-container', $.parseHTML(data))是一个空数组。
  • $('div', $.parseHTML(data))包括所有的div是在里面div#app-container, 但不是div#app-container itself.

这里发生了什么?看来正在发生的事情是这样的$不查看返回的任何顶级元素$.parseHTML(data) or $($.parseHTML(data))),还有他们的孩子。

我怎样才能得到一个jQuery对象为div#app-container由此$.parseHTML(data)?

ANSWER


您需要创建一个 DOM 元素来附加结果.parseHTML()首先,它会在 jQuery 遍历它并找到它之前创建一个 DOM 树div#app-container.

var tempDom = $('<output>').append($.parseHTML(str));
var appContainer = $('#app-container', tempDom);

我使用了你的例子并让它工作:http://jsfiddle.net/gEYgZ/ http://jsfiddle.net/gEYgZ/

The .parseHTML()功能似乎窒息<script>标签,所以我不得不删除它们。

PS.明显地<output>不是真正的 HTML 标签,仅用于示例

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery() 在 jQuery.parseHTML() 结果中找不到元素 的相关文章