parseInt returns 不是数字 (NaN)

parseInt returns Not a Number (NaN)

我制作了一个 IDE(使用 <textarea> 和 CodeMirror),看起来像这样:

在左侧,有一个 div 包含行数计数器。
所以我想做的是获取最后的行号(上图中的 12)。

这是我的代码:

$(document).ready(function() {    
    $(document).keydown(function() {
        let element = document.getElementsByClassName("CodeMirror-linenumber");
        element = element.item(element.length - 1);
        escape(element);
        let num = "";
        num = parseInt(element);
        console.log(num);
    });
});
<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script src="array.js" type="text/javascript"></script>
        <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.32.0/codemirror.min.css"/>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.52.2/codemirror.min.js"></script>
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.52.2/mode/xml/xml.min.js"></script>
    </head>
    <body>
        <textarea id="editor"></textarea>
        <script>
            var myCodeMirror = CodeMirror.fromTextArea(document.getElementById("editor"), {
                  mode: "xml",
                  htmlMode: true,
                  lineNumbers: true
            });
        </script>
    </body>
</html>


问题是,当我在 Chrome 上 运行 时,它给了我一个输出 "NaN".


我知道这个问题已经有人问过了,但我没有找到满意的答案。

你没有理由使用escape(element)。事实上,无论如何它都被弃用了。您所做的只是将元素编码为某种您不需要的十六进制字符串。

您想要的是简单地访问元素的 innerText 属性,并使用 parseInt(element.innerText) 或更好的 unary plus operator+element.innerText 获取行号:

$(document).ready(function() {    
    $(document).keydown(function() {
        let element = document.getElementsByClassName("CodeMirror-linenumber");
        element = element.item(element.length - 1);
        console.log(+element.innerText);
    });
});
<!DOCTYPE html>
<html>
    <head>
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script src="array.js" type="text/javascript"></script>
        <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.32.0/codemirror.min.css"/>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.52.2/codemirror.min.js"></script>
        <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.52.2/mode/xml/xml.min.js"></script>
    </head>
    <body>
        <textarea id="editor"></textarea>
        <script>
            var myCodeMirror = CodeMirror.fromTextArea(document.getElementById("editor"), {
                  mode: "xml",
                  htmlMode: true,
                  lineNumbers: true
            });
        </script>
    </body>
</html>