【问题标题】:I can't select an html element that was created dynamically with jquery我无法选择使用 jquery 动态创建的 html 元素
【发布时间】:2017-08-02 15:22:53
【问题描述】:

我有一个 html 文件

<body>
    <div id="content">
    </div>
</body>

然后我用js动态改变内容

$.get("foo.html", function(data){
    $("#content").html(data);
});

foo.html 是一个看起来像这样的外部 html 文件

<span id="results">
</span>

这可以改变我页面的内容。我已经检查了 Chrome 的开发工具,页面现在看起来像这样

<body>
    <div id="content">
        <span id="results">
        </span>
    </div>
</body>

太好了。现在我想用 jQuery 显示一些结果

$("#results").text("some text");

这最后一部分不起作用。我只能假设这是因为#results 是动态创建的。我知道事件处理程序存在这个问题,并使用on 而不是click,但这里不是这种情况。我只是想选择元素。

当然,我的实际代码要复杂得多,而且我遗漏了一些内容。如果您认为还有其他可能导致问题的原因,请告诉我,我会检查。

【问题讨论】:

  • 您的结束标签无效 - 只是在这里,还是在您的实际代码中?
  • 正确关闭&lt;/span&gt;
  • 什么时候调用 $("#results").text("some text"); ?即,您如何确保在拨打电话之前加载页面内容?
  • 你把这个$("#results").text("some text");声明放在哪里了?它应该是您的 AJAX 调用完成并且您将新内容插入 DOM 之后。
  • 谢谢@fbuendia,这就是问题所在。我 95% 确定它不是,但我再次检查了我的代码,它是。

标签: javascript jquery html jquery-selectors selector


【解决方案1】:

$.get 是一个异步函数,这意味着它在继续之前不会等待完成。 jQuery 解决这个问题的方法是使用回调函数。在这里,我们定义了一个回调函数。我们需要将文本修改放在 $.get 回调中。

<body>
    <div id="content">
    </div>
</body>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script>
$.get("foo.html", function(data){ //$.get callback function(data)
    $("#content").html(data);
    $("#results").text("some text");
});
</script>

【讨论】:

  • 如果 O/p 想在其他时候设置它怎么办?
  • 那么,@ILike,OP 应该在问题中说明这一点。
【解决方案2】:
  1. 你有一个无效的结束标签 &lt;/span 应该是 &lt;/span&gt;
  2. 当您对它进行操作时,请确保 &lt;span id="results"&gt; 存在于该页面上。因为您是动态加载内容,所以存在竞争条件,因此在加载后对其进行操作:

    $.get(…).done(function(){
       $('#results').text('foo')
    });
    

除此之外,还需要显示更多信息,可能是小提琴或代码 sn-p。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    相关资源
    最近更新 更多