Выбор текстового элемента первого уровня '.text ()' без выбора дочерних элементов - PullRequest
3 голосов
/ 08 февраля 2011

У меня есть следующий html

<label>
outer
<span>inner</span>
</label>

Я хочу заменить «внешнее» значение, оставив интервал с его «внутренним» текстом без изменений.Использование

$('label').text('new outer');

заменяет все содержимое метки (вместе с диапазоном).Есть ли отличный способ выделить только текстовый блок «внешний», не добавляя лишние промежутки или не выполняя сложные вещи, такие как сохранение значения внутреннего промежутка метки и затем его повторное применение?

Ответы [ 2 ]

7 голосов
/ 25 мая 2012

Это обновит только текст первого Text узла в элементе, не нарушая span (или любые последующие Text узлы):

$("label").contents().each(function() {
  // Within this iterator function, jQuery sets `this` to be
  // each child node (including Text nodes, not just Elements)
  if (this.nodeType === 3) { // 3 = text node
      this.nodeValue = "updated ";
      return false;
  }
});

Живой пример | источник

И, конечно, вы можете это уточнить. Текущий текст узла Text доступен (конечно) из node.nodeValue, поэтому, если вы хотите просто изменить это (возможно, заменив только определенные его части), вы можете сделать это; или если вы хотите изменить первый, соответствующий заданному шаблону и т. д.

1 голос
/ 08 февраля 2011

Есть ли изящный способ выбрать только текстовый блок 'external', не добавляя дополнительные интервалы или не выполняя такие сложные вещи, как сохранение значения внутреннего диапазона метки и последующее его повторное применение?

Не совсем.

Вы могли бы использовать регулярное выражение для замены всего до <span>, но это было бы неуклюжим регулярным выражением, и хотя в некоторых случаях это работало бы, оно сломалось бы, если бы у вас была какая-либо другая разметка в там, особенно если у вас был другой элемент, обертывающий <span>.

Мое предложение состояло бы в том, чтобы просто добавить еще один интервал. Если вы знаете, что собираетесь манипулировать этим блоком кода, то дайте ему элемент в DOM. Это лучший способ упростить задачу и избавит вас от глупостей, таких как перестройка всей структуры, просто потому, что вы хотели изменить одно слово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...