用td包含其他元素replacetd中的文本

我的表格如下:

<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,但没有find解决scheme

 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()); }); } 

在jQuery中使用文本节点是一个特别微妙的努力,大部分的操作是完全跳过它们。

而不是经过仔细避免错误节点的麻烦,为什么不把你需要replace的任何东西包装在一个<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.'); 
 $('#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/

删除文本节点,并用所需的任何东西replace<b>标签,而不必触摸input:

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

小提琴

怎么样:

 function changeText() { $("#demoTable td").each(function () { $(this).html().replace("8: Tap on APN and Enter <B>www</B>", ""); } } 

把你的被删除的内容裹在一个ptag中,然后你可以做这样的事情:

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

FIDDLE DEMO: http : //jsfiddle.net/y3p2F/

有点晚了党,但JQuery更改内部文本,但保留HTML至less有一种方法没有提到这里 :

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

没有修复文本,你可以使用(snother)[ https://stackoverflow.com/a/37828788/1587329%5D

 var $a = $('#demoTable td'); var inner = ''; $a.children.html().each(function() { inner = inner + this.outerHTML; }); $a.html('New text' + inner);