jQuery .not() не удаляет элемент?

#javascript #jquery #object

#javascript #jquery #объект

Вопрос:

Я беру копию некоторой информации со страницы, но я не хочу включать определенные <option> элементы, которые появляются внутри <select> элементов на странице.

Поэтому, пока я беру все элементы, которые мне нужны, и сохраняю их в переменной fields , я проверяю, является ли каждый элемент a <select> и есть ли у них то <option> , что мне не нужно.

 var field = allFields[i].innerHTML;                      //allFields is the raw HTML I'm iterating through
if ($(field).find("select").length > 0) {                //If the element we're looking at contains a select
  console.log("Found a select. It is in "   field);
  console.log($(field).find(".bad-option");
  field = $(field).not(".bad-option").prop("outerHTML"); //Use .not() to remove the elements which have the .bad-option class
                                                         // (and .prop("outerHTML") is just there to convert it back to a String instead of a jQuery object)
}
console.log("Adding "   field);
fields[i] = field;                                      //Add the HTML, free of any unwanted options, to the `fields` variable
 

Основываясь на документации jQuery, я бы ожидал .not() , что функция удалит все элементы, из field которых есть bad-option класс. Однако это совсем не так. Когда я регистрируюсь field до и после использования .not() , он выводит одно и то же. Смотрите вывод консоли из приведенного выше кода:

 Found a select. It is in <label>Description:amp;nbsp;<select><option>thing1</option><option class="bad-option">thing2</option></select></label>
-----------------
[jQuery list object size 1, containing an object called option.bad-option]
-----------------
Adding <label>Description:amp;nbsp;<select><option>thing1</option><option class="bad-option">thing2</option></select></label>
 

Так что же происходит? Как мне удалить параметр с определенным классом из объекта jQuery? Почему не .not() работает?

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

Ответ №1:

Документация, возможно, немного сбивает с толку: not удаляет элементы из выделения, а не из DOM. Если вы хотите удалить элементы, просто отфильтруйте и удалите:

 const processed = $(field);
processed.filter(".bad-option").remove();
field = processed.prop("outerHTML");
 

Комментарии:

1. Хм, я точно скопировал ваш код, но, как ни странно, это, похоже, ничего не меняет. консоль. ведение processed журнала действительно дает представление объекта jQuery field . Но после строк .filter() и .prop() повторное ведение журнала просто выдает тот же HTML, что и раньше, по-прежнему с <option class="bad-option"> элементом в нем.