嘿所有我有这个javascript函数,主动搜索我在我的网页上的表。该功能在Mozilla和Chrome中运行,但不在IE中。任何人都可以帮我调整一下这样它可以在所有浏览器中使用吗?这是代码:
function playerSearch(phrase, _name){
var words = phrase.value.toLowerCase().split(" ");
var table = document.getElementsByName(_name)[0];
var ele;
for (var r = 1; r < table.rows.length; r++){
ele = table.rows[r].innerHTML.replace(/<[^>]+>/g,"");
var displayStyle = 'none';
for (var i = 0; i < words.length; i++) {
if (ele.toLowerCase().indexOf(words[i])>=0)
displayStyle = '';
else {
displayStyle = 'none';
break;
}
}
table.rows[r].style.display = displayStyle;
}
}
以下是来自html页面的函数调用:
<span id="filter" class="filter">Player Search:<input onkeyup="playerSearch(this, 'currentTable')" type="text"></span>
答案 0 :(得分:1)
听起来IE正在坚持插入tBody dom元素。尝试将var table = document.getElementsByName(_name)[0];
更改为var table = document.getElementsByName(_name)[0].tBodies[0];
修改强>
在阅读下面的评论并进行一些谷歌搜索后,结果发现name
不是全局属性,而且根据HTML4.01 specification不是表上的有效属性(这在当前没有变化) HTML5 specification的草稿这是不幸的是当IEs javascript引擎成为规则时,当你document.getElementsByName(_name)
返回0长度数组时,其他浏览器制造商实际上正在破坏规范。
答案 1 :(得分:1)
这是我的答案,适用于所有浏览器。 IE,NetScape和所有其他浏览器都有单独的功能。
<script type="text/javascript" language="JavaScript">
var OtherBrowser = (document.getElementById);
var IE4 = (document.all);
var NS4 = (document.layers);
var win = window;
var n = 0;
function findInPage(str) {
var txt, i, found;
if (str == "") {
alert("Enter some thing to search");
return false;
}
else if (IE4) {
txt = win.document.body.createTextRange();
for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
txt.moveStart("character", 1);
txt.moveEnd("textedit");
}
if (found) {
txt.moveStart("character", -1);
txt.findText(str);
txt.select();
txt.scrollIntoView();
n++;
}
else {
if (n > 0) {
n = 0;
findInPage(str);
}
else
alert("Sorry, we couldn't find.Try again");
}
}
else if (OtherBrowser) {
if (!win.find(str)) {
while (win.find(str, false, true, false, false, false, true))
n++;
}
else if (win.find(str)) {
n++;
}
}
if (NS4) {
if (!win.find(str)) {
while (win.find(str, false, true, false, false, false, true))
n++;
}
else if (win.find(str)) {
n++;
}
}
return false;
}
</script>
答案 2 :(得分:0)
如果你想在应用一些灵活的表格功能(包括我认为你想要在这里实现的过滤器)时省去一些麻烦,我建议使用DataTables。