tl; dr:如果动态生成的元素是body
,那么如何使点击处理程序可见的DOM元素成为关闭<div id='submodal_1' class='submodal'>foo</div>
<div id='submodal_2' class='submodal'>bar</div>
</body>
之前的最后一个元素被追加?
基本上我想让打开元素的点击也在DOM中移动它,即使在附加了一些动态元素之后,它也会在身体关闭之前移动。
我的问题源于在另一个模态中打开的模态,而在一个页面上有多个模态。一个问题是,子页面在页面加载时存在于DOM中,而主要模态在实例化时被点击(子模块使用不同的代码生成,而主模块使用jQuery UI对话框)。
如果你打开一个模态然后打开子模式一切都很好。如果打开第二个模态然后在重新打开第一个模态时将其关闭,则子模块将不会显示,因为它隐藏在第二个模态下方。如果我将这些子模型附加到正文中,从而将它们放在任何生成的模态之后它们看起来很好(但这会产生其他问题)。尽管它看起来似乎不是一个z-index问题(我已经尝试了所有与之相关但没有运气的东西),但它似乎与这些模态在DOM中的位置有关。
代码可能更清晰:
这就是页面加载时html的样子:
<div id='submodal_1'>subfoo</div>
<div id='submodal_2'>subbar</div>
<div id='primary_modal_1' class='ui-dialog' style='display:block'>foo</div>
</body>
单击以打开第一个主模式窗口后:
$('#submodal_1').insertAfter('#primary_modal_1');
单击打开该模态的子模式后,我必须将子模式移动到主模态下面,否则它将不会出现(并且z-index不会影响此阻塞):
#primary_modal_1
此时如果你关闭<div id='submodal_2' class='submodal'>subbar</div>
<div id='primary_modal_1' class='ui-dialog' style='display:none'>foo</div>
<div id='submodal_1' class='submodal'>subfoo</div>
<div id='primary_modal_2' class='ui-dialog' style='display:block'>bar</div>
</body>
,它将被隐藏但仍然存在于DOM中。如果你打开一秒,代码现在看起来像:
<div id='submodal_2' class='submodal'>subbar</div>
<div id='primary_modal_1' class='ui-dialog' style='display:block'>foo</div>
<div id='primary_modal_2' class='ui-dialog' style='display:none'>bar</div>
<div id='submodal_1' class='submodal'>subfoo</div> //<-- moved this line
</body>
此时如果您重新打开第一个主模态并尝试打开其子模式,则不会出现子模式。但是,如果将子模式移动到最后一个主模态之下,则如下:
{{1}}
子模式将正确地发挥作用。我想确保子模式总是在DOM中的最后一个,无论附加多少个主模态。
答案 0 :(得分:7)
JQuery的附加方法&#34;将参数指定的内容插入到匹配元素集中每个元素的末尾。&#34;
$('body').append(...);
每次动态添加内容时,您都必须移动元素。
检查这个JSFiddle: http://jsfiddle.net/eZ2Dq/
答案 1 :(得分:3)
看一下jQuery appendTo
方法。
答案 2 :(得分:1)