Javascript 使用getElementsByTag更改表中的值

Javascript 使用getElementsByTag更改表中的值,javascript,html-table,Javascript,Html Table,过去几天我一直在尝试这样做,但我的Javascript非常糟糕。非常 基本上,我要做的是在td中取值,然后检查10位数字的字符串。(事实上,任何美国格式的电话号码。我已经想出了正则表达式。)我需要用其他东西(不是电话号码的东西)替换这个字符串 表结构如下所示: <tr id="76"> <td class="stxt"> <div class="dtxt" id="t1344992123" title="14 Aug

过去几天我一直在尝试这样做,但我的Javascript非常糟糕。非常

基本上,我要做的是在td中取值,然后检查10位数字的字符串。(事实上,任何美国格式的电话号码。我已经想出了正则表达式。)我需要用其他东西(不是电话号码的东西)替换这个字符串

表结构如下所示:

    <tr id="76">
        <td class="stxt">
            <div class="dtxt" id="t1344992123" title="14 Aug 12, 08:55 PM">17 mins ago</div>
            <span>
                <a title="Delete">[×]</a>&nbsp;
                <a title="Ban User">[o]</a>&nbsp;
            </span>
            <b class="nme pn_std">Person</b>
            : This is a line a user has said previously
        </td>
    </tr>

17分钟前
[×] 
[o]
人
:这是用户之前说过的一句话
将有多行具有相同的格式。上面写着:“这是用户之前说过的一行”是需要检查的数字

我发布的表格格式是我必须处理的全部内容。无法添加,也无法删除任何标记/属性

如果有人能够拿出代码来检查和替换我搜索的每个实例,我可以自己插入正则表达式和替换字符串

如果有人好奇,这是一个用于cbox聊天的单词过滤器。它只是在有人加载聊天时运行的东西


任何能帮我的人都会很棒。就像我说的,我在Javascript方面很弱。PHP是我使用的语言。

如果您不支持IE8以下的任何内容,可以使用较新的querySelectorAll。但在评论之后,我想我会对这一点进行评论,支持旧的方法

//var tableCells = document.querySelectorAll('#tableId td'),
var tableCells = document.getElementsById('tableId').getElementsByTagName('td'),
i = tableCells.length;

while(i--){
    var thisCell = tableCells[i];
    thisCell.innerHTML = thisCell.innerHTML.replace(yourRegEx,yourReplacementStuff);
}

在有人谈论regEx和HTML之前,请记住,他只是在这里寻找电话号码,而不是用regEx解析HTML。您可以在整个表的innerHTML属性上使用regEx,但我怀疑循环和咬取较小的部分实际上可能更快。

如果您无法唯一标识要替换其文本的元素,则需要迭代所有文本节点,并用与正则表达式匹配的文本替换这些节点(你还没有给我们看)

函数处理表(id){
var table=document.getElementById(id);
var细胞;
var re=/\d{10}//;//只是一个例子
var text='foo';//只是一个例子
如果(表){
//可以先遍历table.rows,然后遍历row.cells,
//但gEBTN似乎很合适
cells=table.getElementsByTagName('td');
对于(变量i=0,iLen=cells.length;i
要对其进行测试的一些HTML:

<table id="t0">
  <tr>
    <td>1234567890
    <td><span>1234567890</span>
  <tr>
    <td>foo 1234567890 bar
    <td><span><b>1234567890</b></span>
  <tr>
    <td><a href="http://www.google.com">1234567890</a>
    <td><span>1234567890</span>
<table>

<button onclick="processTable('t0')">Do replacements</button>

1234567890
1234567890
foo 1234567890巴
1234567890
1234567890
更换

上述内容应该适用于任何支持javascript的浏览器,比如IE 5(我认为是IE开始支持getElementById的时候,当然是IE 6支持的)。

我会使用
var tableCells=document.getElementById('tableId').getElementsByTagName('td'))
,因为它只是稍微复杂一点,可以与旧的浏览器配合使用。这一点很好。因为querySelector使用的CSS引擎更注重于更通用的标记,所以速度可能也更快。人们昨天在JS聊天中用querySelectorAll闲逛,性能结果有些令人惊讶。您可能会注意到TD中的div可能很好地匹配OP的正则表达式(10位),因此innerHTML解决方案不是一个好主意。这实际上对示例非常有效,直到我意识到脚本最终位于表中。因此,利用我不存在的javascript技能,我尝试删除函数和表引用,并更改“table.getElements…”改为“this.getElements…”。它不喜欢那样。哈哈。那么应该对它做什么其他更改呢?为了回答您关于正则表达式Im的问题,请使用/(?([0-9]{3}))?[-.]([0-9]{3})[-.]([0-9]{4})/这对我的其他脚本非常有效,我一直在编写这个脚本,直到我做了上面的更改。我只是注意到我的打字错误…依赖。(我讨厌打字错误…>\u<)
<table id="t0">
  <tr>
    <td>1234567890
    <td><span>1234567890</span>
  <tr>
    <td>foo 1234567890 bar
    <td><span><b>1234567890</b></span>
  <tr>
    <td><a href="http://www.google.com">1234567890</a>
    <td><span>1234567890</span>
<table>

<button onclick="processTable('t0')">Do replacements</button>