2012-03-09 94 views
0

有没有办法让这个更简单?在另一个孩子DIV之前在父DIV中创建一个DIV

$('#content').append('<div id="bar"></div>'); 
$('#bar').insertBefore('#footer'); 
$('#foo').appendTo('#bar'); 

这就是最终产品的样子,但我认为有更清晰的方法可以做到这一点。

<div id="content"> 
    <div id="bar"> 
    <div id="foo"></div> 
    </div> 
    <div id="footer"></div> 
</div> 

......好吧,我把它归结为两行。

$('<div id="bar"></div>').insertBefore('#footer'); 
$('#foo').appendTo('#bar'); 

有真不是一个理由追加到#内容,因为#footer的将永远存在。

+0

我不认为['insertBefore()'](http://api.jquery.com/insertBefore/)做你认为*的事情;在你的使用中,它会在$('#footer')'元素前面插入'$('#bar')'作为兄弟。而你的完成代码表明'#bar'应该是'#footer'的* parent *。 – 2012-03-09 22:53:11

+0

谢谢,刚刚发现。让我更新这个例子。好的更新。我错误地复制了这个例子。 – benblustey 2012-03-09 22:55:13

回答

2

可能,我建议:

$('<div id="bar" />').insertBefore($('#footer')).append('<div id="foo" />'); 

JS Fiddle demo。虽然这可能是为了简洁(而且说实话,我觉得它很容易阅读和理解),但我不确定它比你自己的第一次尝试简单得多。

在上面的代码中,我假设#foodiv在页面上不存在。如果确实已经存在,则改用:

$('<div id="bar" />').insertBefore($('#footer')).append($('#foo'));​ 

JS Fiddle demo

参考文献:

+0

这正是我正在寻找的。虽然我的解决方案奏效,但这是一个大问题。你是对的,'foo'是加载到标题中的动态SEO内容,但需要将其移动到模板页面中。这是一个完美的解决方案。感谢您的指导。 – benblustey 2012-03-09 23:17:53

+0

绝对受欢迎;我很高兴得到了帮助! =) – 2012-03-09 23:20:34