我有以下html格式
<tr>
<td width="80%" style="padding-bottom: 3px" class="ms-vb">
<span class="ms-announcementtitle">
title is here 1
</span>
<br>
by Ahmed 1
</td>
</tr>
<tr>
<td width="80%" style="padding-bottom: 3px" class="ms-vb">
<span class="ms-announcementtitle">
title is here 2
</span>
<br>
by Ahmed 2
</td>
</tr>
<tr>
<td width="80%" style="padding-bottom: 3px" class="ms-vb">
<span class="ms-announcementtitle">
title is here 3
</span>
<br>
by Ahmed 3
</td>
</tr>
我想将<br>
之后的文字替换为“由管理员创建”,即by Ahmed 1 --> Created by Admin
,依此类推......
答案 0 :(得分:5)
不是操纵父对象的HTML并导致大部分表被重新分析,您可以直接使用此代码查找并替换该文本,该代码是jQuery和普通javascript的组合:
$(".ms-announcementtitle").each(function() {
$(this).nextAll("br").get(0).nextSibling.nodeValue = "Created By Admin";
});
这会找到class="ms-announcementtitle"
的跨度,然后找到它后面的<br>
标记,然后获取该节点的DOM节点并获取将作为文本节点的nextSibling,最后直接更改它的文本。
你可以在这里看到它:http://jsfiddle.net/jfriend00/z5zVT/。
jQuery没有很多处理文本节点的函数,因为要替换的文本没有包装在自己的容器中,最好用jQuery找到该区域,然后使用普通的javascript操作来处理文本节点直接而不是修改更高级别容器的innerHTML,导致容器中的所有内容都被重新解析。
如果您为此控制HTML,最好将所需文本包装在<span class="creator">
中,然后您可以通过以下方式更直接地定位该跨度的内容:< / p>
$(".creator").text("Created by Admin");
答案 1 :(得分:1)
在您的示例中使用HTML,这将起作用 -
$("table tr > td").contents()
.filter(function() {
return this.nodeType == 3; //Node.TEXT_NODE
}).remove();
$("table tr > td").append("Created by Admin")
只要出现'由Ahmed n'出现的地方,这将替换任何文本。
答案 2 :(得分:0)
您应该真正指定要用来替换文本的工具。通过查看标签,我假设你想使用JQuery。
您是否可以将要更改的文本换行到标记内?如果是这样,这可能有所帮助:http://www.webdeveloper.com/forum/showthread.php?t=84892。那里的建议使用简单的旧Javascript而不是JQuery,但我不明白为什么那会是一个问题。