我需要找到指定div中文本的长度(即字符数)(#post_div)排除HTML格式和非特定跨度的内容。因此,任何非#span1#span2的嵌入式跨度都需要从计数中排除。
到目前为止,我有以下解决方案可行,但它添加/删除了我不想做的DOM。
var post = $("#post_div");
var post2 = post.html(); //duplicating for later
post.find("span:not(#span1):not(#span2)").remove(); //removing unwanted (only for character count) spans from DOM - YUCK!
post = $.trim(post.text());
console.log(post.length); // The correct length is here.
$("#post_div").html(post2); //replacing butchered DIV with original duplicate in DOM - YUCK!
我更希望获得相同的结果,但是不需要对DOM进行屠宰/添加/替换它以获得简单的字符数。
希望有意义
答案 0 :(得分:1)
不是复制HTML然后处理原始节点,而是复制节点并在主DOM树之外处理它。
var post = $("#post_div").clone();
post.find("span:not(.post_tag):not(.post_mentioned)").remove();
post = $.trim(post.text());
console.log(post.length); // The correct length is here.
答案 1 :(得分:0)
实际上,简单
var t = $.trim($("#post_div span.post_tag, #post_div span.post_mentioned").text());
console.log(t.length);
应该是足够的。
但是,如果您在span元素之外有文本内容,则必须使用
var t = $.trim($("#post_div").text());
var t_inner = $("#post_div span:not(.post_tag):not(.post_mentioned)").text());
console.log(t.length - t_inner.length);