Поиск подстроки через jQuery

У моего JSP есть следующий div

<td class = "detail">Hello my name is Bond
<br/>James Bond
</td>

Мне нужно найти, есть ли у класса "деталь" подстрока "Бонд Джеймс Бонд"

Поскольку у Бонда Джеймса Бонда есть "бр" посередине, как я могу найти это, есть ли в этой строке подстрока

Я пробовал несколько комбинаций / n и br в jQuery для отображения

alert($('.detail').text().toLocaleLowerCase().indexOf('bond\n james bond'));

и

 alert($('.detail').text().toLocaleLowerCase().indexOf('bond<br> james bond''));

но он всегда возвращает -1. помогите мне заранее спасибо

Сначала я бы поместил результат этого вызова text () в предупреждение, чтобы вы могли видеть, что он вернется к вам ... Это может помочь вам понять, что вам нужно искать. Возможно, вам придется использовать \ n \ r (или это \ r \ n?) Для новой строки - не уверен, хватит ли \ n ...

moilejter 24.08.2018 09:29
Поведение ключевого слова "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) для оценки ваших знаний,...
1
1
107
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте text(), чтобы получить только внутренний текст td (без HTML), а затем удалите все лишние пробелы между ними.

Затем вы можете просто сопоставить его с регулярным выражением, созданным из вашего текста. См. Демонстрацию ниже:

const searchString = 'Bond James Bond';
const regex = new RegExp(searchString);
const text = $('.detail:first').text().replace(/\s+/g, ' ');

console.info(text, '-', regex.test(text));
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
    <td class = "detail">Hello my name is Bond
      <br/>James Bond
    </td>
  </tr>
</table>
Ответ принят как подходящий

У вас здесь две проблемы. Во-первых, ответ text() в этом случае удалит тег <br /> в середине элемента (так как это HTML). Во-вторых, при удалении останется много пустого места и разрыв строки. В результате вывод текста будет:

hello my name is bond
      james bond

Вы можете использовать Regex для удаления разрывов строк и дополнительных пробелов перед выполнением проверки indexOf():

var text = $.trim($('.detail').text()).toLocaleLowerCase().replace(/\s+/g, ' ');

console.info(text.indexOf('bond james bond'));
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
    <td class = "detail">Hello my name is Bond
      <br/>James Bond
    </td>
  </tr>
</table>

Привет, Рори, это не будет работать в IE 8. Появляется ошибка «Объект не поддерживает свойство или метод 'trim'».

Ayush 24.08.2018 13:07

Да, trim() не поддерживается в <IE9. Вместо этого вы можете использовать регулярное выражение. Хотя в этом примере это технически не требуется, все же рекомендуется полностью дезинфицировать вводимый текст перед тем, как работать с ним.

Rory McCrossan 24.08.2018 13:10

не могли бы вы дать мне небольшую демонстрацию, как вы дали для обрезки

Ayush 24.08.2018 13:11

Проверьте это: stackoverflow.com/questions/2308134/…

Rory McCrossan 24.08.2018 13:11

решение здесь работает с .val (), но здесь я использую .text ()

Ayush 24.08.2018 13:18

Ничто здесь или в этом вопросе не использует val() ...?

Rory McCrossan 24.08.2018 13:18

ссылка, которую вы сказали мне сослаться, содержала все решения с .val (). Мне нужно решение для .text ()

Ayush 24.08.2018 13:19

Нет, используйте это: stackoverflow.com/a/2308157/519413. Он работает для любой строки, независимо от ее источника.

Rory McCrossan 24.08.2018 13:20

В качестве альтернативы используйте $.trim(). Я обновил ответ для вас

Rory McCrossan 24.08.2018 13:21

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