jQuery:一个简单的标签替换

时间:2011-12-17 17:12:37

标签: jquery tags replace

我只想将所有<p>代码替换为<tr>

function test() {
$("p").each(function(index) {
var htmlStr = $(this).html();
$(this).replaceWith("<tr>" + htmlStr + "<\/tr>");
});
}

它不起作用。替换确实有效,但删除了<p>标记的html内容。所以输出就像<tr></tr>

此外,这个功能将遍历整个html页面,对吧?我只是想在#content_div处理它。我应该在$("p")之前添加任何内容吗?

4 个答案:

答案 0 :(得分:3)

这是因为<TR>不能包含<TH><TD>以外的任何内容。 jsFiddle

function test() {
    $("#content_div").find('p').each(function(index) {
        var htmlStr = $(this).html();
        $(this).replaceWith("<tr><td>" + htmlStr + "</td><\/tr>");
    });
}

答案 1 :(得分:0)

您可能看不到任何内容,因为您在tr标签中创建内容作为示例http://jsfiddle.net/Pf5n3/

对于要显示的内容,如果您还没有像这样的tr,那么您需要将您的内容放在td中 http://jsfiddle.net/Pf5n3/1/

答案 2 :(得分:0)

通过搜索/替换函数直接操作HTML是不可靠的 - 正在解析的HTML中的任何属性都会破坏代码..

我选择这样做..给出

的任何空目标表
<table>
    <tbody></tbody>
</table>

使用此javascript

function test() {
    $("p").each(function(index) {
        $("tbody").append($("<tr></tr>").html(this.innerHTML));
        $(this).remove();
    });
}

see the fiddle here

答案 3 :(得分:0)

我做了一些实验,并认为你可以使用jQuery的wrap函数在元素周围添加一个标记。这会留下段落标签,但这可能不是您主要关注的问题。这导致一些非常容易遵循的代码:

$("#content_div p").wrap("<tr>");

但是,这在其他帖子中没有任何意义,因为您可能还需要一个TD标签,并且可能还有一个围绕所有元素的表标签。您的代码将如下所示:

$("#content_div p").wrapAll("<table>");
$("#content_div p").wrap("<tr><td>");