Jquery получает html или текст сразу после тега ввода внутри метки

У меня есть метка как

<label>
    <input type = "checkbox" value = "160">160
</label>

или это может быть похоже на

<label>
    <input type = "checkbox" value = "-160-"><del>160</del>
</label>

Теперь я пытаюсь:

var text = $(this).find('label').html();

Но это возвращает целое <input type = "checkbox" value = "-160-"><del>160</del>, чего я не хотел. Я также пытался использовать .text(), но текст также не возвращает тег <del> (т. е. возвращает только 160).

Я также пробовал с contents().eq(1), но безуспешно. Я хочу обрезать входной тег или получить все внутри тега метки и после входного тега

Ожидаемый результат:

<del>160</del> в случае <input type = "checkbox" value = "-160-"><del>160</del>

и

160 в случае <input type = "checkbox" value = "160">160

попробуйте этот var text = $(this).find('label, del').text();

Ankit Tiwari 23.12.2020 07:25

какой результат вы хотите получить? вернуть <del> 160 </del>?

s.kuznetsov 23.12.2020 07:27

@Ankit, я не думаю, что он вернет тег del

Aayush Dahal 23.12.2020 07:32

@sergeykuznetsov Я добавил ожидаемый результат, надеюсь, это прояснит вас.

Aayush Dahal 23.12.2020 07:33

вам нужен тег del или текст тега del

Ankit Tiwari 23.12.2020 07:40

@Ankit Я хочу, чтобы он был с тегом del, если он есть, то есть с тегом и текстом <del>160</del>

Aayush Dahal 23.12.2020 07:50
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
120
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете получить каждый дочерний элемент html-тега, используя Node.childNodes, и вы можете работать с некоторым условием, какой тег вы хотите сохранить, а какой нет.

document.querySelectorAll("label").forEach(function(item) {
  var _childNodes = item.childNodes;
  for (var i = 0; i < _childNodes.length; i++) {
    console.info(_childNodes[i].outerHTML);
  }
})
<label><input type = "checkbox" value = "-160-"><del>160</del></label>

метка в html часто имеет атрибут for, например этот

<input id = "test" type = "checkbox" value = "160"><label for = "test">160</label>

тогда ваш javascript будет

console.info($("label[for='test']").text());
Ответ принят как подходящий

Вы можете найти следующий родственный узел input, а затем проверить, является ли он узлом HTML, и если да, вернуть outerHTML, в противном случае вернуть textContent узла.

function getContents(label) {
  let next = $(label).find('input')[0].nextSibling;
  while (!next.outerHTML && next.textContent.trim().length == 0) {
  next = next.nextSibling;
}
  return next.outerHTML ? next.outerHTML : next.textContent;
  }
  
console.info(getContents('#div1 label'));
console.info(getContents('#div2 label'));
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id = "div1">
<label>
    <input type = "checkbox" value = "160">160
</label>
</div>
<div id = "div2">
<label>
    <input type = "checkbox" value = "-160-">
    <del>160</del>
</label>
</div>

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

Abhishek Pandey 23.12.2020 08:11

@AbhishekPandey, но OP хочет, что после тега ввода

Nick 23.12.2020 08:12

@Nick Здесь кажется, что все работает нормально, но в моем проекте вместо <del>160</del> отображается пустое любое предложение, где я должен проверить.

Aayush Dahal 23.12.2020 09:21

Возможно, у вас есть пробел перед тегом del?

Nick 23.12.2020 10:03

Да Вот оно.

Aayush Dahal 23.12.2020 10:13

В этом случае первый узел после input является этим пробелом, поэтому он вернет его. Если это произойдет, вам, возможно, следует взглянуть на решение @AbhishekPandey, поскольку оно позволяет вам перебирать все дочерние узлы метки, а затем вы можете выбрать те, которые вам нужны.

Nick 23.12.2020 10:18

В качестве альтернативы вы можете перебирать nextSibling, пока не найдете узел HTML или непустой текстовый узел, например. while (!next.outerHTML && next.textContent.trim().length == 0) next = next.nextSibling; Смотрите мою правку.

Nick 23.12.2020 10:22

Попробуйте использовать это решение:

$('.labels label').each(function(i, el){
   let $num = $(el).find('input')[0].nextSibling
   if ($num.nodeType == 3) {
    console.info($num.data);
   }else {
    console.info($num);
   }
   
})
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "labels">
  <label>
      <input type = "checkbox" value = "-160-"><del>160</del>
  </label>
  <label>
      <input type = "checkbox" value = "-160-">160
  </label>
</div>

Другие вопросы по теме