54

我的表如下:

<table id='demoTable'>
   <tr>
       <td>8: Tap on APN and Enter <B>www</B>.
           <INPUT id=h150000000000000109743 class=hid value="test value" type=hidden>
           <INPUT id=h250000000000000109743 class=hid1 value="26,222,98,10,50000000000000109744,T,~25,221,99,10,,T,www" type="hidden">
       </td>
   </tr>
</table>

我只想更改文本8: Tap on APN and Enter <B>www</B>.
而不影响隐藏字段

我正在尝试 jQuery 但没有找到解决方案

function changeText() {
    $("#demoTable td").each(function () {
        for (var i = 0; i < $(this).children.length; i++) {
            alert($(this).children(i).val());
        }
        // alert($(this).html());
        // $(this).text("hello");
        // alert($(this).html());
    });
}
4

6 回答 6

75

在 jquery 中使用文本节点是一项特别精细的工作,并且大多数操作都会完全跳过它们。

与其费力避免错误的节点,不如直接将需要替换的内容包装在 a<span>中,例如:

<td><span class="replaceme">8: Tap on APN and Enter <B>www</B>.</span></td>

然后:

$('.replaceme').html('Whatever <b>HTML</b> you want here.');
于 2012-12-11T09:46:36.200 回答
5

删除文本节点,并用<b>您需要的任何内容替换标签,而无需触摸输入:

$('#demoTable').find('tr > td').contents().filter(function() {
    return this.nodeType===3;
}).remove().end().end()
  .find('b').replaceWith($('<span />', {text: 'Hello Kitty'}));

小提琴

于 2012-12-11T09:17:23.937 回答
5
$('#demoTable td').contents().each(function() {
    if (this.nodeType === 3) {
        this.textContent
        ? this.textContent = 'The text has been '
        : this.innerText  = 'The text has been '
    } else {
        this.innerHTML = 'changed';
        return false;
    }
})

http://jsfiddle.net/YSAjU/

于 2012-12-11T09:22:02.887 回答
1

怎么样:

function changeText() {
    $("#demoTable td").each(function () {
       $(this).html().replace("8: Tap on APN and Enter <B>www</B>", "");
    }
}
于 2012-12-11T09:12:58.280 回答
1

聚会有点晚了,但是JQuery 更改内部文本但保留 html至少有一种方法没有在这里提到

var $td = $("#demoTable td");
$td.html($td.html().replace('Tap on APN and Enter', 'new text'));

如果不修复文本,您可以使用 (snother)[ https://stackoverflow.com/a/37828788/1587329]

var $a = $('#demoTable td');
var inner = '';
$a.children.html().each(function() {
    inner = inner + this.outerHTML;
});
$a.html('New text' + inner);
于 2017-08-03T15:43:11.043 回答
0

将要删除的内容包装在 ptag 中,然后您可以执行以下操作:

$(function(){
  $("td").click(function(){ console.log($("td").find("p"));
    $("td").find("p").remove();    });
});

小提琴演示:http: //jsfiddle.net/y3p2F/

于 2012-12-11T09:17:00.537 回答