Javascript 使用getElementsByTag更改表中的值
过去几天我一直在尝试这样做,但我的Javascript非常糟糕。非常 基本上,我要做的是在td中取值,然后检查10位数字的字符串。(事实上,任何美国格式的电话号码。我已经想出了正则表达式。)我需要用其他东西(不是电话号码的东西)替换这个字符串 表结构如下所示: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
<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>
<a title="Ban User">[o]</a>
</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>