javascript - 如何在 jQuery .load() 之后更新 DOM?

标签 javascript jquery html dom load

我想从模板文件 (b.xhtml) 加载 html 内容,将其插入调用文件 (a.xhtml),然后更新插入的节点(例如添加/删除属性等)。

插入部分工作正常,但 DOM 似乎没有更新。

这是测试用例。

a.xhtml(调用的html文件)

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script>
    <script>
        $(document).ready(function(){
            $("button").click(function(){
                $("#placeholder").load("b.xhtml #id2");
                // why doesn't this work?
                var myTemp = document.querySelector("#id2");
                if (myTemp) {
                    alert(myTemp.innerHTML);
                } else {
                    alert("#id2 is undefined");
                };
            });
        });
    </script>
</head>
<body>
    <h1>jQuery load test</h1>
    <div><button>Load template</button></div>
    <div id="placeholder"></div>
</body>
</html>

b.xhtml(模板 html 文件)

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
    <div id="templates">
        <p id="id1">This is template one</p>
        <p id="id2">This is template two</p>
    </div>
</body>
</html>
  1. 如何在 .load() 之后更新 DOM?
  2. 是否有更简单的方法从外部 HTML 文件插入 HTML 节点,该文件会自动更新 DOM?
  3. 或者,在将节点插入 a.xhtml 之前(或之后),如何更改或添加 b.xhtml 中的节点属性?例如,如何将 alt="template text"属性添加到 #id2 节点?

最佳答案

.load() 方法是异步的,因此您的脚本正在执行该行,但不会等待它完成后再继续下一行。你可以做几件事。首先,使用回调函数:

$("#placeholder").load("b.xhtml #id2", function(){
            var myTemp = document.querySelector("#id2");
            if (myTemp) {
                alert(myTemp.innerHTML);
            } else {
                alert("#id2 is undefined");
            };
});

或者,使用 .done():

$("#placeholder").load("b.xhtml #id2").done(function(){
            var myTemp = document.querySelector("#id2");
            if (myTemp) {
                alert(myTemp.innerHTML);
            } else {
                alert("#id2 is undefined");
            };
});

关于javascript - 如何在 jQuery .load() 之后更新 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38147015/

相关文章:

javascript - 第一次单击时不会开始滚动列表元素

javascript - jquery失焦时隐藏元素

javascript - 无法访问指令 Controller 中的 $scope 值

javascript - 如何使用 jquery 添加循环多个 HTML5 视频?

html - Facebook 点赞按钮 : Hard to click - small hotspot

javascript - 使用 JSTL 将对象设置为表格行

html - 具有 div 结构的 block 开始输出不正确

javascript - 当浏览器宽度/高度改变时自动调整图像大小

javascript - 检测 HTML5 视频音量属性是否为只读?

javascript - $().text();没有改变值(value)