#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
журнала действительно дает представление объекта jQueryfield
. Но после строк.filter()
и.prop()
повторное ведение журнала просто выдает тот же HTML, что и раньше, по-прежнему с<option class="bad-option">
элементом в нем.