Мне нужно найти длину текста (то есть количество символов) текста в указанном 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/добавления/замены вещей из него для простого подсчета символов.
Надеюсь, что имеет смысл
Вместо того, чтобы дублировать 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.
На самом деле, простой
var t = $.trim($("#post_div span.post_tag, #post_div span.post_mentioned").text());
console.log(t.length);
Должно быть.
Однако, если у вас есть текстовое содержимое Вне элементов диапазона, вам придется использовать
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);