Как проверить, выбран ли текущий элемент цикла во втором цикле элементов?

0

У меня есть цикл jQuery, который проверяет текущий элемент в цикле на другой список элементов - если есть совпадение, мне нужно очистить значение от текущего элемента в цикле.

$('.subDDL').each(function () {
    var $this = $(this);
    if ($this.val() == ****second loop id here**** ) {
        //Do something
    }
    else {
        //Do something else.
    }
})

Чтобы попытаться объяснить немного по-другому, у меня есть таблица с флажком "Включить". Затем у меня есть вспомогательная таблица, которая может включать элемент из основной таблицы, но ТОЛЬКО когда эта опция из основной таблицы включена.

Поэтому, когда я перебираю элементы подкатегории, мне нужно перейти в основную таблицу и проверить включенные опции. Если есть какие-либо вспомогательные значения, которые не включены в основную таблицу, мне нужно установить значение текущего подпункта на "Нет", в основном удалив это значение, которое не разрешено.

  • 0
    Если бы вы могли предоставить скрипку, я мог бы показать вам, как это делается. Вопрос слишком абстрактен, чтобы кто-то мог извлечь из него урок.
  • 1
    Можете ли вы предоставить нам HTML-код таблицы?
Показать ещё 3 комментария
Теги:
each
jquery-selectors

3 ответа

1
Лучший ответ

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

var checkboxes = $(".cbx");
var selects = $('.subDDL');

function sanitizeSelectMenus($el) {

  selects.each(function (i, v) {
    var $v = $(v);
    var current = $v.find(":selected");
    var forbidden = !! $el ? $el.parents("td").next() : checkboxes.filter(":not(:checked)").parents("td").next();
    $.each(forbidden, function (i, v) {
        if (current.text() == $(v).text()) {
            current.removeAttr("selected");
            $($v.children()[0]).attr("selected", "selected");
        }
    });
  });
}

checkboxes.on("click", function (e) {
  var $el = $(e.target);
  if ($el.is(":not(:checked)")) {
    sanitizeSelectMenus($el);
  }
});

selects.on("change", function () {
  sanitizeSelectMenus();
});

http://jsfiddle.net/JVf8F/6/

Вы также можете достичь этого, добавив атрибуты данных в свои флажки и поля выбора, тем самым делая поиск по тексту (который может быть довольно неточным) избыточным. Я решил показать вам пример выше, потому что казалось, что ваш HTML генерируется чем-то, и я не знал, сколько у вас контроля над ним.

  • 0
    Спасибо @ Mike86, вы правы, я создаю таблицу из цикла for который также имеет еще один вспомогательный цикл для создания дополнительных строк. Хотя то, как я решил эту проблему, сильно отличалось от вашего ответа, ваш ответ правильный. Спасибо.
0

Итак, в конце я использовал массив для проверки... Когда я перебирал строки в основной таблице (до того, как я попал в подтаблицу), я создал массив и перебросил каждую строку, не отмеченную в этом массиве. Все, что мне нужно было сделать в моей инструкции if ($.inArray(DsID[0], DsAry) >= 0) что означает, что если значение sub row появляется в массиве, мне нужно удалить его.

Спасибо всем за помощь.

0

Я не уверен, поможет ли это, поскольку вопрос немного неясен (мне). Здесь вы можете сделать вложенный цикл для сравнения элементов:

for(var i = 0; i < table1.length; i++) {
    for(var j = 0; j < table2.length; j++) {
        if(table1Items[i].value == table2Items[j].value) {
            alert("Match!");
        }
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню