Попытка найти длину текста в div с помощью jquery

0

Мне нужно найти длину текста (то есть количество символов) текста в указанном 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/добавления/замены вещей из него для простого подсчета символов.

Надеюсь, что имеет смысл

Теги:

2 ответа

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.
  • 0
    Благодарю. Добавляется ли клон в DOM (т. Е. Отображается где-то на экране) и, следовательно, также должен быть удален? Я бы предпочел не изменять DOM, если это возможно .... не знаю, кажется, это просто грязно для таких мелких вещей, как подсчет символов.
  • 0
    Нет. Клон является отдельным узлом, поэтому не отображается.
Показать ещё 1 комментарий
0

На самом деле, простой

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);
  • 0
    Если в промежутке нет контента, который также должен учитываться.
  • 0
    Правильно, содержимое в главном DIV (#post_div) плюс содержимое в # span1 и # span2 должно быть подсчитано, а все остальное, КРОМЕ содержимого в любом другом SPAN, должно быть исключено.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню