为什么 javascript 通过正则表达式抛出错误

Why is javascript throwing error over regex

我正在尝试使用一个名为 'cutKeepingTags()' 的 HTML t运行cating 函数,该函数在网上找到并进行了演示 (https://jsfiddle.net/7mbxf5hq/),但是当我尝试 运行 我得到一个控制台错误: Uncaught TypeError: 无法读取未定义的 属性 'match' 在 cutKeepingTags ((index):566)。 我正在使用框架 Codeigniter 3,OS 是 Windows 10 最新版本,jQuery 的版本是 3.3.1,PHP 版本是 7.4.7,我正在使用 Vscode 作为我的编辑。

功能码为:

function cutKeepingTags(elem, reqCount) {
    var grabText = '',
        missCount = reqCount;
    $(elem).contents().each(function() {
        switch (this.nodeType) {
            case Node.TEXT_NODE:
                // Get node text, limited to missCount.
                grabText += this.data.substr(0, missCount);
                missCount -= Math.min(this.data.length, missCount);
                break;
            case Node.ELEMENT_NODE:
                // Explore current child:
                var childPart = cutKeepingTags(this, missCount);
                grabText += childPart.text;
                missCount -= childPart.count;
                break;
        }
        if (missCount === 0) {
            // We got text enough, stop looping.
            return false;
        }
    });
    return {
        text:
            // Wrap text using current elem tag.
            elem.outerHTML.match(/^<[^>]+>/m)[0] + grabText + '</' + elem.localName + '>',
        count: reqCount - missCount
    };
}

反对的行是包含'match(/^<[^>]+>/m)[0]'的倒数第二行。在演示工作时,它对我来说应该是 'advertised'。为什么 Javascript 会抛出错误?

当您通过 class (.) select 一个元素时,它总是 returns 一个数组,无论您是否有多个。在第一个参数中传递的元素必须是原生 dom 元素,而不是 dom 元素的数组。

var target = $('.truncated');var target = $('.truncated')[0];

不同

在幕后,JQuery 正在这样做:document.getElementsByClassName('truncated')[0];