为什么 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];
我正在尝试使用一个名为 '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];