[英]Adding an element after another element that has no parent
我想在jQuery中实现可重用的UI元素,在HTML元素后添加按钮。
有两种使用该元素的方案:在HTML中静态声明和在JS中动态创建。 我在实现第二个用例时遇到问题。
静态用例:
<span class=".ui-element'>Content</span>
我在jQuery中拾取元素并将按钮放在跨度之后:
the_span.after(the_button);
到目前为止,这个工作正常。
在动态创建的跨度上使用相同的技术时,会出现问题:
var the_span = $("<span>").text("Content").after(the_button);
return the_span; // caller is responsible for adding it the DOM
这是行不通的:此后DOM中没有按钮。 我猜这是因为该范围还没有父级,而静态声明的范围却有一个父级?
这可以通过解决
在动态创建的范围周围引入包装元素:
var wrapper = element.wrap($('span')).parent(); wrapper.append(the_span, the_button);
现在,我的函数必须返回包装器而不是范围,以便调用者可以将其添加到DOM中。 这是意外行为,并且会中断链接。 我也不想在静态用例中要求包装器,因为在那里不需要。
the_span.append(the_button);
我无法使用此解决方案,因为之后我希望能够在原始范围上使用.text()和.html(),这将删除该按钮。
要求先将跨度添加到DOM,然后再添加我的按钮。 这行得通,但是我更喜欢不需要此功能的解决方案。
我该如何解决?
关于第二个解决方案
- the_span.append(the_button); 我无法使用此解决方案,因为之后我希望能够在原始范围上使用.text()和.html(),这将删除该按钮。
你试过了吗
the_span.parent().append(the_button);
以节省.text()和.html()的好处
您应该使用.add
代替.after
,如下:
var the_span = $("<span>").text("Content").add(the_button);
return the_span; // caller is responsible for adding it the DOM
使用.add
会将元素添加到jQuery选择中。
在工作中看到它: https : //jsfiddle.net/nbm83e85/
更新:
您应该注意,更改the_span
实例的文本如下:
the_button.text("Changed Button Name");
the_span.text("New Span Content");
将更改the_span
jQuery集合中所有选定元素的文本,即跨度和按钮,因此按钮的文本将更改为与跨度相同的值。 要解决此问题,应按以下方式使用它:
the_button.text("Changed Button Name");
$(the_span[0]).text("New Span Content");
祝好运。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.