替换后的文字

时间:2011-11-26 08:32:08

标签: jquery html replace

我有以下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,依此类推......

3 个答案:

答案 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'出现的地方,这将替换任何文本。

演示 - http://jsfiddle.net/6J69V/1/

答案 2 :(得分:0)

您应该真正指定要用来替换文本的工具。通过查看标签,我假设你想使用JQuery。

您是否可以将要更改的文本换行到标记内?如果是这样,这可能有所帮助:http://www.webdeveloper.com/forum/showthread.php?t=84892。那里的建议使用简单的旧Javascript而不是JQuery,但我不明白为什么那会是一个问题。