我试图限制作为HTML编辑器的contenteditable div中的字符。 我需要限制为N(1500)个字符,不包括HTML。
所以我现在想出了这个:
$(".minieditor-content").bind('click', function (event) {
var length = $(".minieditor-content").text().length;
if (length > 1499) {
angular.element(".minieditor-content").html(html_substr($(".minieditor-content").html(), 1499));
}
});
function html_substr (str, count) {
var div = document.createElement('div');
div.innerHTML = str;
walk(div, track);
function track(el) {
if (count > 0) {
var len = el.data.length;
count -= len;
if (count <= 0) {
el.data = el.substringData(0, el.data.length + count);
}
} else {
el.data = '';
}
}
function walk(el, fn) {
var node = el.firstChild;
do {
if (node.nodeType === 3) {
fn(node);
// Added this >>------------------------------------<<
} else if (node.nodeType === 1 && node.childNodes && node.childNodes[0]) {
walk(node, fn);
}
} while (node = node.nextSibling);
}
return div.innerHTML;
}
哪个效果很好。唯一的问题是如果我输入超过限制的更多字符,删除后,光标移动到段落的开头,它允许你键入,然后它删除段落的结尾。 也许Substringing是最好的选择。您对我的代码有什么建议/调整以使其有效?
由于