0

我有这个代码:

<tr id="row">
    <td id="col">
        <img>
        text
        <p></p>
    </td>
</tr>

我想<p>从 tr 中获取每个“文本”,将它们分别包装在 a 中<td>并将它们添加到 main<tr>中。

最终结果应如下所示:

<tr id="row">
    <td id="col"><img></td>
    <td class="text-class">text><td>
    <td class="p-class"><p></p></td>
</tr>

我试图找到每个元素并将其包装在一个 td 中,但我做错了。

有什么建议吗?

4

3 回答 3

0

尝试

var map = $('#col').replaceWith(function(){
    var map = $(this).contents().map(function(idx){
        var $td = $('<td />');
        if(this.nodeType == 3){
            if($.trim($(this).text()) == ''){
                return
            } else {
                $td.addClass('text-class');
            }
        } else if($(this).is('p')){
            $td.addClass('p-class');
        }

        return $td.append(this)
    });
    map.get(0).attr('id', this.id)
    return map.get()
});

演示:小提琴

于 2013-08-16T08:32:13.593 回答
0

使用 Javascript:

  • 要检索colElement列,请检索具有的代码id = "col"(请参阅getElementById
  • 要读取其子类型p,请执行以下操作:(var p = colElement.getElementsByTagName("p");这同样适用于所有其他类型的子项 - 请参阅此链接以获取信息)

只需迭代您以这种方式检索的集合,然后<td>通过将它们添加为标记的子项将它们包装在标记中(有关更多信息,请参见appendChild 方法)。

于 2013-08-16T08:35:56.437 回答
0
jQuery(function($){
    myTD = $("tr#row > td");
    myTD.children().each(function(){
        $this = $(this);
        wrapper = $("<td></td>");            
        wrapper
            .addClass($this.prop("tagName").toLowerCase()+"-class")
            .html($this)
            .appendTo(myTD.parent());
    });
    myTD.remove();
});

不完全是你想要的,但很接近。您可以通过修改 .each(function(index){ 等添加逻辑以将原始 td id 添加到循环的第一个元素...

于 2013-08-16T08:43:05.363 回答