javascript - Jquery Append 未按预期顺序工作

标签 javascript jquery html

新年快乐。我正在尝试创建分页链接。所以基本上我的代码很大,所以我创建了下面的代码以便于理解。

<div id = "test"></div>

func1();

function func1() {
    $("#test").append("<nav><ul class='pagination pagination-lg'>");
    func3();
    $("#test").append("</ul></nav>");
}

function func2() {

$("#test").append("<li>data</li>"); 
}

function func3() {
func2();
}

我希望结果是这样的

<nav><ul class="pagination pagination-lg"><li>data</li></ul></nav>

但是输出是

<nav><ul class="pagination pagination-lg"></ul></nav><li>data</li>

为什么会这样?尽管我在附加 </ul></li> 之前调用了函数

P.s Fiddle http://jsfiddle.net/s6d5wytf/

最佳答案

当您附加格式错误的 HTML 时,浏览器将尽最大努力将其转换为格式良好的 HTML,因此当您这样做时:

    $("#test").append("<nav><ul class='pagination pagination-lg'>");

浏览器看到它有一个打开的 <ul>没有 </ul> 的标签并假设你已经完成了它 - 特别是因为一个鲜为人知的事实是 </ul>标记是隐式的,可以由浏览器推断。

那么 - 您在概念上首先要附加的是:

    $("#test").append("<nav><ul class='pagination pagination-lg'></ul></nav>");

您想要做的是使用您构造并附加到的临时元素或链接字符串。这是第一种方法的示例

function func1() {
    var menu = $("<nav></nav>"); // create but not add anywhere
    menu.append("<ul class='pagination pagination-lg'></ul"); // add ul
    func3(menu);
    $("#test").append(menu);
}

function func2(menu) {
    menu.find("ul").append("<li>data</li>"); 
}

这还有一个额外的好处,即只查询一次实际文档,速度更快,但如果只查询 3 次,则可以忽略不计。

关于javascript - Jquery Append 未按预期顺序工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27763690/

相关文章:

javascript - 使用 jQuery 在滚动 div 的顶部和底部查找 DOM 元素

php - 选择多个具有相同名称的复选框

javascript - jQuery 自动完成子字符串匹配

javascript - 添加新的 DOM 子元素时显示动画

html - 如何只使图像可点击而不是整个 div?

javascript - JQuery 调用 XML Web 服务

javascript - wordpress在javascript中获取标题

javascript - 防止 IMG 调整大小和不一致的 Div 高度变化?

css - 将四个 div 放在一个包装器中,只有 1 个显示自己

html - Flexbox CSS 在 Featherlight Light Box 中不起作用。我还能如何在 Lightbox 中定位元素,或修复 Flexbox?