Замените неэффективный код jQuery циклом while - PullRequest
0 голосов
/ 01 апреля 2020

У меня работает следующий код -

$('.sectionHeader:contains(Product Specific Documents)').next('div').find('table').find('input[type="checkbox"]').attr('checked', true);
var attr = $('.sectionHeader:contains(Product Specific Documents)').next('div').next('div').attr('id');
if(typeof attr !== undefined && attr !== false) {
$('.sectionHeader:contains(Product Specific Documents)').next('div').next('div').find('table').find('input[type="checkbox"]').attr('checked', true);
}

По сути, он устанавливает / проверяет флажки внутри определенных c таблиц. Работает нормально, но выглядит некрасиво.

Я бы хотел заменить его на некоторое время l oop. Идея, лежащая в основе пока l oop, заключается в -

Найти требуемый заголовок (таблицы) и следующий DIV после того, как этот заголовок назначен переменной. Затем я проверяю в al oop, существует ли атрибут id, и если да, то я ищу в нем таблицу, затем устанавливаю флажки внутри и выбираю их. Затем я переназначаю переменную, добавляя следующий DIV и проверяю ее, пока l oop.

Итак, код выглядит так -

var at = $('.sectionHeader:contains(Product Specific Documents)').next('div');
while (typeof at.attr('id') !== undefined || at.attr('id') !== false) {
    at.find('table').find('input[type="checkbox"]').attr('checked', true);
    at = at.next('div');
}

Но это не работает / это не делает то же самое, что и мой исходный код.

1 Ответ

0 голосов
/ 01 апреля 2020
var at = $('.sectionHeader:contains(Product Specific Documents)').next('div');
for (var idx = 0; idx < 4 && (typeof at.attr('id') != 'undefined' && at.attr('id') != null); ++idx) {
    at.find('table').find('input[type="checkbox"]').attr('checked', true);
    at = at.next('div');
}

// Это для l oop работает

Я также обнаружил, почему в то время как l oop не работал - потому что проверка на ноль была важна -

var at = $('.sectionHeader:contains(Product Specific Documents)').next('div');
while (typeof at.attr('id') !== 'undefined' && at.attr('id') != null) {
    at.find('table').find('input[type="checkbox"]').attr('checked', true);
    at = at.next('div');
}

// Это пока тоже работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...