我正在尝试使用一个在网上找到并演示的名为"cutKeepingTags(("的HTML截断函数(https://jsfiddle.net/7mbxf5hq/)但当我尝试运行它时,我会得到一个控制台错误:未捕获类型错误:无法读取未定义的属性"match"位于cutKeepingTags((索引(:566(。我使用的是Codeigniter 3框架,操作系统是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]"的倒数第二行。作为演示工作,它应该为我的工作'广告'。为什么Javascript抛出错误?
按类选择元素(.
(时,无论是否有多个,它都会返回一个数组。第一个参数中传递的元素必须是本机dom元素,而不是dom元素的数组。
var target = $('.truncated');
与var target = $('.truncated')[0];
不同
在幕后,JQuery正在做这件事:document.getElementsByClassName('truncated')[0];