使用解析器进行Javascript搜索

时间:2018-11-09 08:06:28

标签: javascript html

我想让此代码与我的解析器一起使用。

(fset #'afs-next-error #'next-error)
(fset #'afs-previous-error #'previous-error)
(with-eval-after-load "tex"
  (progn
    (define-key TeX-mode-map (kbd "M-g n") #'afs-next-error)
    (define-key TeX-mode-map (kbd "M-g p") #'afs-previous-error)))

解析器:

function search() {
var input, filter, table, tr, td, i;
input = document.getElementById("input");
filter = input.value.toUpperCase();
table = document.getElementById("myTable");
tr = table.getElementsByTagName("tr");
for (i = 0; i < tr.length; i++) {
    td = tr[i].getElementsByTagName("td")[0];
    if (td) {
        if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
            tr[i].style.display = "";
        } else {
            tr[i].style.display = "none";
        }
    }
}

html:

function load() {
data = data[0];
var uno = document.getElementById('data');
for(var i = 0; i < data.list.length; i++)
{
    var content = uno.innerHTML;
    content += "<div class='grid-item'><div class='inside' id='item" + i + "'><h2 id='contents" + i + "' class='pl-content-title' href=./index.html#" + data.list[i].hash + ">" + data.list[i].title + "</h2><div class='collapsing'><br><table id='mytable'>";
    for(var e = 0; e < data.list[i].content.length; e++)
    {
        content += "<tr><td class='tabledata'><a class='pl-content' href=./index.html#" + data.list[i].content[e].hash + ">" + data.list[i].content[e].title + "</a></td></tr>";
    }
    uno.innerHTML = content + "</table></div></div></div>";
}

如果我将表直接复制到html中,则可以使用,但是如果表是由我的解析器脚本构建的,则不能使用。 来自浏览器控制台的错误消息是:

<input class="pl-search" type="text" placeholder="Suche" id="input" onkeyup="search()">

对此有何想法?

1 个答案:

答案 0 :(得分:1)

<table id='mytable'>

应该是

<table id='myTable'>

此错字导致table = document.getElementById("myTable");返回null。

在这样的静态示例中,您只需修正错字即可。

在编写动态函数时,请使用后备功能防止错误

tr = table ? table.getElementsByTagName("tr") : null;
评估tr时,

依次类推for。 (声明k)

for (i = 0, k= tr ? tr.length : 0; i < k; i++)