javascript 索引

a260881071 2011-08-10 10:12:30
table有几百行。每行都有一个车牌列。

现在有若干车牌,怎么才能找到相对应的行,我以前是这样处理的。

var veh =["车牌1","车牌2"];

for(var i =0; i<veh.length;i++)
for(var j = 0; j<tb.rows.length;j++)
{
if(veh[i] ==tb.rows[j].cell[0].innerHTML)
{
//更新这一行的数据。
}
}

注意这里的table有添加,修改,删除行的操作。
如果有五百台车,每次veh 的length > 50,客户端就处理不过来(也就是循环了<=500*50次)。

而现在是每三秒执行一次。(反正就是这样处理效率很低)


现在想问的是得到‘车牌1’能不能迅速的得到它在table中的行的index而不是通过for循环去一个个比较。




--------------------------------------帅签分割线-------------------------------------------------
...全文
227 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
s1120624175 2011-08-11
  • 打赏
  • 举报
回复
但是过多的ID也不好 几百行就得几百个ID。。。
s1120624175 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 truelove12 的回复:]

先说一个简单的易实现的方法

车牌号一般来说可以是唯一键。
所以,你可以在输出的html的tr中加上车牌号的id

<tr id='浙X010101'></tr>
这个时候就可以直接循环行,还不需要再循环列。

找到tr时,就返回这个tr对象的rowIndex,就是所在行的索引了。
[/Quote]
这个方法其实也不错
s1120624175 2011-08-11
  • 打赏
  • 举报
回复

var tempStr = tb.innerHTML;
var rowIndex = tempStr.split("车牌1")[0].split(/<TR>/g).length -2;
alert(rowIndex);


<table id="tb">
<tr><td>车牌2</td><td></td><td></td></tr>
<tr><td>车牌3</td><td></td><td></td></tr>
<tr><td>车牌4</td><td></td><td></td></tr>
<tr><td>车牌5</td><td></td><td></td></tr>
<tr><td>车牌1</td><td></td><td></td></tr>
<tr><td>车牌6</td><td></td><td></td></tr>
<tr><td>车牌7</td><td></td><td></td></tr>
<tr><td>车牌8</td><td></td><td></td></tr>
</table>

这可以避免循环
孟子E章 2011-08-10
  • 打赏
  • 举报
回复
其实没那么多次循环的。
你可以

if(veh[i] ==tb.rows[j].cell[0].innerHTML)
{
//更新这一行的数据。
break; //退出这次的循环
}
a260881071 2011-08-10
  • 打赏
  • 举报
回复
二楼的方法好。可是中文id要注意些神马吗?




--------------------------------------帅签分割线-------------------------------------------------
a260881071 2011-08-10
  • 打赏
  • 举报
回复
[Quote= 引用 3楼 net_lover 的回复:]
你的veh 里面的车牌号顺序是固定的吗?如果是固定的好办
[/Quote]

不固定。




--------------------------------------帅签分割线-------------------------------------------------
MuBeiBei 2011-08-10
  • 打赏
  • 举报
回复
用id吧~··
hch126163 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 truelove12 的回复:]

先说一个简单的易实现的方法

车牌号一般来说可以是唯一键。
所以,你可以在输出的html的tr中加上车牌号的id

<tr id='浙X010101'></tr>
这个时候就可以直接循环行,还不需要再循环列。

找到tr时,就返回这个tr对象的rowIndex,就是所在行的索引了。
[/Quote]

+++

用ID
孟子E章 2011-08-10
  • 打赏
  • 举报
回复
你的veh 里面的车牌号顺序是固定的吗?如果是固定的好办
  • 打赏
  • 举报
回复
先说一个简单的易实现的方法

车牌号一般来说可以是唯一键。
所以,你可以在输出的html的tr中加上车牌号的id

<tr id='浙X010101'></tr>
这个时候就可以直接循环行,还不需要再循环列。

找到tr时,就返回这个tr对象的rowIndex,就是所在行的索引了。
lijianc23 2011-08-10
  • 打赏
  • 举报
回复
期待高手来解决
  • 打赏
  • 举报
回复
CUD(建改删)时相应地去更新一下这个JSON
  • 打赏
  • 举报
回复
输出页面的时候,除了TABLE,还可以输出一个对应表格内每行车牌索引的JSON变量:

var theforever_csdn ={"车牌1":车牌1所在行,"车牌2":车牌2所在行,"车牌3":车牌3所在行……};
var veh = ['车牌1', '车牌2'];
for(each in veh) {
alert(veh[each]+'所在的行是'+theforever_csdn[veh[each]]);
}



打字员 2011-08-10
  • 打赏
  • 举报
回复
一点想法(缓存和截字符比较后获取排序),主要是觉得这个方法比较通用一些,而且效率也不差。

function searchIndex(id, str, sIndex) {//tableID, 要比较的字符, table中要比较字段所在的列
if(!window.tableSort) {
window.tableSort = {};
}
if(!window.tableSort[sIndex]) {
var list = document.getElementById(id).getElementsByTagName('tr');
var len = list.length;
var temp = [];
for(var i = 0; i < len; i++) {
temp.push(list[i].getElementsByTagName('td')[sIndex - 1].innerHTML.replace('/(^\s*)|(\s*$)/g', ''));
}
window.tableSort[sIndex] = temp.join(',');
}
var sTemp = window.tableSort[sIndex];
var sTemp2 = sTemp.substr(0, sTemp.indexOf(str) - 1);
return sTemp2 == sTemp? -1 : sTemp2.length == 0? 0 : sTemp2.split(',').length;
}

var veh = ['车牌1', '车牌2'];
for(each in veh) {
alert(searchIndex('table', veh[each], 1));
}
blogaspnet 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 godspeedch 的回复:]

如果实在想一次query可以用这个:
JScript code
var query = function(){
var conditions = [];
for(var i=0; i<ids.length; i++){
conditions.push('td:contains("' + ids[i] + '")');
}

$(cond……
[/Quote]

jquery就可以。很方便。

欢迎光临我的博客
Howardch 2011-08-10
  • 打赏
  • 举报
回复
如果实在想一次query可以用这个:
var query = function(){
var conditions = [];
for(var i=0; i<ids.length; i++){
conditions.push('td:contains("' + ids[i] + '")');
}

$(conditions.join(',')).css('color', 'red');
};
Howardch 2011-08-10
  • 打赏
  • 举报
回复
用JQuery吧,速度很快的。看下面的代码:前面的代码是在生成一个table, 关键在最后那个query那个方法上。
<html>
<head>
<script src="jquery-dev.js" type="text/javascript"></script>
</head>
<body>
<table>

</table>
<input type="button" value="Query" onclick="query()" />
<script type="text/javascript">
var ids = [];

$(function(){
var rowCount = 100;
for(var i=0; i<rowCount; i++){
var number = parseInt(Math.random() * 10000);
var row = $('<tr><td>' + number + '</td></tr>');
$('table').append(row);

if(i%5===0) ids.push(number);
}
});

var query = function(){
for(var i=0; i<ids.length; i++){
$('td:contains("' + ids[i] + '")').css('color', 'red');
}
};
</script>
</body>
</html>
MrChapter 2011-08-10
  • 打赏
  • 举报
回复
不一定用id属性,可以是任意属性。只要能把这个车牌号隐藏起来就行了。[Quote=引用 13 楼 a260881071 的回复:]
引用 7楼 a260881071 的回复:
二楼的方法好。可是中文id要注意些神马吗?
--------------------------------------帅签分割线-------------------------------------------------


break;是必须的。所以我说了<=500*50




----------------------……
[/Quote]
a260881071 2011-08-10
  • 打赏
  • 举报
回复
[Quote= 引用 7楼 a260881071 的回复:]
二楼的方法好。可是中文id要注意些神马吗?
--------------------------------------帅签分割线-------------------------------------------------
[/Quote]

break;是必须的。所以我说了<=500*50




--------------------------------------帅签分割线-------------------------------------------------
abcd_ufo 2011-08-10
  • 打赏
  • 举报
回复
他是在table 中td 中的 值 ie 拿可能没有空格 但是在ff 里面拿值的时候 可能 就会出现 空格..

晚辈在一次测试除过这样的问题
加载更多回复(3)

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧