Javascript 如何包装由<;分隔的文本节点;br>&书信电报;Br>;用自己的<;p>;标签?
我从一个无法修改的Web服务返回的内容返回如下数据:Javascript 如何包装由<;分隔的文本节点;br>&书信电报;Br>;用自己的<;p>;标签?,javascript,jquery,html,web-services,Javascript,Jquery,Html,Web Services,我从一个无法修改的Web服务返回的内容返回如下数据: <div id="entrance" style=""> Habilitação / Diploma de Ensino Medio Diploma de Ensino Pre Universitario <br> <br> Diploma Record of study </div> Habilitação/恩西诺大学预科文凭 学历 如何使用jQu
<div id="entrance" style="">
Habilitação / Diploma de Ensino Medio Diploma de Ensino Pre Universitario
<br>
<br>
Diploma Record of study
</div>
Habilitação/恩西诺大学预科文凭
学历
如何使用jQuery将这两句话包装在单独的标记中?我知道我可以用。包装,但那会包装全部内容。我需要正则表达式吗
谢谢,
托马斯
更新:
我的要求变为需要一个列表而不是段落,因此使用下面的答案,我稍微修改了一下,将其用- 包装
jQuery('#entrance').show();
jQuery('#entrance').html(data).contents().each(function () {
if ( this.nodeType === 3 ) jQuery( this ).wrap( '<li />' );
else jQuery( this ).remove();
});
jQuery('#entrance').wrapInner('<ul />');
jQuery('#入口').show();
jQuery('#entry').html(数据).contents().each(函数)(){
if(this.nodeType==3)jQuery(this.wrap(“”);
else jQuery(this.remove();
});
jQuery(“#入口”).wrapInner(“
”);
那么:
$( '#entrance' ).contents().each(function () {
if ( this.nodeType === 3 && $.trim( this.data ) !== '' ) {
$( this ).wrap( '<p />' );
} else {
$( this ).remove();
}
});
$('#入口').contents().each(函数(){
if(this.nodeType===3&&$.trim(this.data)!==''){
$(this.wrap(“”);
}否则{
$(this.remove();
}
});
现场演示:
我的代码将所有非空文本节点转换为包含该文本的段落。将删除所有其他类型的节点。此方法使用$(This).text()
查找每个子元素的长度。如果为零,则将其删除,否则将其包装在段落中:
$('#entrance').contents().each(function(i,el) {
if ($.trim($(this).text()).length) {
$(this).wrap('<p>');
} else {
$(this).remove();
}
});
$('#入口').contents().每个(函数(i,el){
if($.trim($(this.text()).length){
$(this.wrap(“”);
}否则{
$(this.remove();
}
});
唯一的缺点:您的代码还在
标记之间的换行符外创建了一个段落。@Blazemonger啊,是的。我认为它没有,因为我在我的演示中没有看到它。我会解决的…谢谢,我正在研究使用replaceWith()。就像一个符咒。谢谢,我确实修改了它以使用一个列表。如果您有兴趣,请参阅更新的问题。谢谢,看起来不错。不过,我使用的是上面答案的修改版本,因为我的需求变成了需要列表而不是段落。