2

我从无法修改返回数据的 Web 服务返回内容,例如:

<div id="entrance" style="">
    Habilitação / Diploma de Ensino Medio Diploma de Ensino Pre Universitario 
    <br>
    <br>
    Diploma Record of study 
</div>

如何使用 jQuery 将两个句子包装在单独的 < p > 标签中?我知道我可以使用 .wrap 但这会包装整个内容。我需要正则表达式吗?

谢谢,托马斯

更新:

我的要求改为需要一个列表而不是段落,所以使用下面的答案,我稍微修改它以包装在 <li> 然后整个东西在一个 <ul>

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 />');
4

2 回答 2

4

怎么样:

$( '#entrance' ).contents().each(function () {
    if ( this.nodeType === 3 && $.trim( this.data ) !== '' ) {
        $( this ).wrap( '<p />' );
    } else {
        $( this ).remove();
    }
});

现场演示:http: //jsfiddle.net/ZMD6m/5/

我的代码将所有非空文本节点转换为包含该文本的段落。所有其他类型的节点都将被删除。

于 2012-08-07T19:45:23.803 回答
1

此方法用于$(this).text()查找每个子元素的长度。如果为零,则将其删除,否则将其包装在一个段落中:

$('#entrance').contents().each(function(i,el) {
    if ($.trim($(this).text()).length) {
        $(this).wrap('<p>');
    } else {
        $(this).remove();
    }
});​

http://jsfiddle.net/mblase75/ZMD6m/3/

于 2012-08-07T19:55:50.300 回答