Как вы фильтруете / выбираете <select><option> по содержимому тега опции? - PullRequest
0 голосов
/ 18 апреля 2020

Я нашел много ответов о том, как извлечь значение тега <option> или содержимое самого тега, `content here '

Однако мне интересно, есть ли способ чтобы выбрать опцию по текстовому значению <option>text here</option> - в этом случае, используя text here в качестве совпадающего термина.

Я создаю довольно простую форму для внутреннего использования - которая эффективно ограничит число вариантов во втором раскрывающемся списке, основанном на выборе первого раскрывающегося списка. Однако, поскольку это является частью CMS, использование атрибута value блока не будет надежным усилием. Я знаю, что написание и формулировка текстового параметра раскрывающегося списка важны, и это будет то, что мне нужно.

Я знаю, что это не очень хорошая практика - поверьте мне, я это знаю. Однако сейчас мне нужно сделать это быстро и потратить на это как можно меньше времени. Не изобретая и не переделывая все логи c для этого десятилетнего инструмента, я бы выбрал этот маршрут.

Итак, можно ли фильтровать по внутреннему тексту тега? Я ЗНАЮ, что вы можете извлечь его, но мы хотим отфильтровать, чтобы мы могли ограничить параметры, из которых пользователь может выбирать.


    <select id="one">
        <option value="a">eh</option>
        <option value="b">bee</option>
    </select>

    <select id="two">
        <option value="m">emm</option>
        <option value="lw">lolwot</option>
        <option value="p">dinner</option>
    </select>

В этом случае, если они выбирают «b» из первого выпадающего списка - это во втором раскрывающемся списке их выбор будет ограничен -only- lolwot - удаляются emm и dinner.

Просто повторюсь, я не хочу извлекать выбранную опцию. $('#two').find('option:selected').text() это не то, что я ищу.

1 Ответ

0 голосов
/ 18 апреля 2020

Да, это возможно. Предполагая, что вы хотите оставить тот, у которого есть внутренний текст lolwot, вы можете сделать следующее:

[...document.getElementById("two").children].forEach((item) => {if (item.innerText !== "lolwot") item.remove()})
  • мы получаем элемент по id и его дочерним элементам в квадратных скобках
  • мы преобразовываем это в массив, поэтому у нас есть массив дочерних элементов
  • мы повторяем этот массив
  • , если текущий элемент не соответствует критериям, мы просто удаляем его

Если вы хотите получить элементы для удаления, вы можете отфильтровать:

[...document.getElementById("two").children].filter((item) => (item.innerText !== "lolwot"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...