2012-03-28 68 views
0

我得到这个:为什么我的JQuery.after()在元素之前插入代码?

   $('input[name=whatWeLove1]').before('<ul><li>'); 
       $('input[name=whatWeLove1]').after('</li></ul>'); 

,并产生这样的:

<ul> 
    <li> 
    </li> 
</ul> 
<input type="text" name="whatWeLove1" class="" maxlength="40"> 

为什么?

干杯, 斯特凡

+3

这里最根本的一点是,你在HTML标记来思考,但你不处理一旦加载页面就会带有标记,您正在处理DOM树 - 实际对象图中的实际对象。 – 2012-03-28 09:39:07

回答

2

它可能是因为你输入破损的代码(在你修复它之前)...所以浏览器(或可能是萤火虫或可能jQuery)试图显示它正确格式化/修复。

达到你想要做什么,最好的办法是使用.wrap()

$('input[name=whatWeLove1]').wrap('<ul><li>');

+0

你不需要关闭标签。 – Jivings 2012-03-28 11:16:55

+0

够公平:)冷静 – 2012-03-28 14:45:00

1

我想你想

$('input[name=whatWeLove1]').wrap('<ul>').wrap('<li >'); 
+1

打我吧。但是你只需要一个换行功能。 – Jivings 2012-03-28 09:38:20

3

因为jQuery将自动假设你不想只是插入打开标签和关闭元素为您服务。

你想用.wrap();

$('input[name=whatWeLove1]').wrap('<ul><li>'); 
1

,因为你之前插入的元素:

$('input[name=whatWeLove1]').before('<ul><li>'); 

这种自动关闭元素的输入元素之前,以防止错误的标记。

您可以创建<ul><li>结构,然后插入您的输入或直接输入wrap()

2

JQuery操作DOM,而不是HTML。这是一个微妙的区别,但它意味着它不会让你产生无效的HTML。运行第一行会生成不匹配的标签,直到您运行第二行,并且它不会让您这样做

您需要使用wrap函数,正如@NicolaPeluchetti所述。

相关问题