用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; } })
删除文本节点,并用所需的任何东西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);