【发布时间】:2016-02-24 21:55:44
【问题描述】:
我有一个部门,我需要在发生事件时更改其外部 HTML。问题是,在设置 outerHTML 时,我无法引用新选择的 DOM 对象,除非我再次明确捕获它。
有没有办法在调用outerHTML 时直接更新变量引用(在我的例子中是下面div 变量的引用)?
$("#changeDiv").click(function(){
var div = $(this).prev();
div[0].outerHTML = `<div id="imSecondtDiv"> <p> World </p> </div>`;
console.log(div); // logs [div#imFirstDiv, prevObject: n.fn.init[1], context: button#changeDiv]
// the following line does not affect the newly added division
// since the var `div` references the old DOM object
// unless I add div = $(this).prev(); before setting the html of
// the paragraph it will not set it
div.find('p').html('Override');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="imFirstDiv"> <p> Hello </p> </div>
<button id="changeDiv" >Change Div 1</button>
【问题讨论】:
-
您是否特别需要更改
outerHTML(这并不是真正的标准)?您通常不会将其与 jQuery 一起使用。相反,您可以删除第一个 div 并添加第二个吗? -
将 id 设置为 p 标签然后添加这个 $("#p_id").text("override");而不是 div.find('p').html('Override');
-
好吧,我的真实案例比示例复杂得多,我有一个项目列表,这些项目相对于列表中出现的每个项目进行索引,删除项目列表后,我会更新所有以前的项目以保持正确的索引,因此我将当前项目的所有 HTML 元素名称和 id 更新为新的,并用 outerHTML 替换循环中的分区
标签: javascript jquery html