jquery: проверьте, есть ли хотя бы один .element, содержащий хотя бы один .element2

0

Некоторое время я занимался этим, не могу понять.

Вскоре мне нужно проверить, соответствует ли контент на определенной странице/сегменте/имеет соответствующий формат.

условия

  1. должен быть хотя бы один элемент.box
  2. каждый элемент.box должен содержать один или несколько элементов div класса.question
  3. каждый.question должен содержать два или более: переключатели

Это было бы нормально (не путайте с остальными элементами, это просто настоящий пример):

<div class="box" type="1">
        <div class="question">
            <div class="answers">
                <table>
                    <tr>
                        <td><input type="radio" name="someName" value="1" /><label>Some Label Here..</label></td>
                        <feedback>Question response 1.<strong>some quoted content in bold</strong></feedback>
                    </tr>
                    <tr>
                        <td><input type="radio" name="someName" value="1" /><label>Some Label Here..</label></td>
                        <feedback>Question response 1.<strong>some quoted content in bold</strong></feedback>
                    </tr>
                </table>
            </div>
        </div>
    </div>
    <div class="box" type="1">
        <div class="question">
            <div class="answers">
                <table>
                    <tr>
                        <td><input type="radio" name="someName" value="1" /><label>Some Label Here..</label></td>
                        <feedback>Question response 1.<strong>some quoted content in bold</strong></feedback>
                    </tr>
                    <tr>
                        <td><input type="radio" name="someName" value="1" /><label>Some Label Here..</label></td>
                        <feedback>Question response 1.<strong>some quoted content in bold</strong></feedback>
                    </tr>
                </table>
            </div>
        </div>
    </div>

Но это не сработает, потому что в одном.question div (последний) он имеет только один: переключатель, чтобы он недействителен:

<div class="box" type="1">
        <div class="question">
            <div class="answers">
                <table>
                    <tr>
                        <td><input type="radio" name="someName" value="1" /><label>Some Label Here..</label></td>
                        <feedback>Question response 1.<strong>some quoted content in bold</strong></feedback>
                    </tr>
                    <tr>
                        <td><input type="radio" name="someName" value="1" /><label>Some Label Here..</label></td>
                        <feedback>Question response 1.<strong>some quoted content in bold</strong></feedback>
                    </tr>
                </table>
            </div>
        </div>
    </div>
    <div class="box" type="1">
        <div class="question">
            <div class="answers">
                <table>
                    <tr>
                        <td><input type="radio" name="someName" value="1" /><label>Some Label Here..</label></td>
                        <feedback>Question response 1.<strong>some quoted content in bold</strong></feedback>
                    </tr>
                    <tr>
                        <td><label>Some Label Here..</label></td>
                        <feedback>Question response 1.<strong>some quoted content in bold</strong></feedback>
                    </tr>
                </table>
            </div>
        </div>
    </div>

Я пробовал что-то вроде этого, но это не работает для меня...:

  1. if ($ ('. box'). filter (function() {var self = $ (this); return self.find('. question'). length == 1 && self.find('. question: radio').length> 1;}). length> 0) {alert ('NO')} else {$ ('. box: first'). fadeIn (1000); }

  2. и это:

    if ($ ('. box'). length) {$ ('. box'). each (function() {if ($ (". question", this).length) {$ (". question"). каждый (функция() {if ($ (': radio', this).length> 1) alert ('ok')});}

    }); } else {alert ('! ok'); }; };

Теги:

2 ответа

1

Пытаться

var $boxes = $('.box'),
    valid = $boxes.length > 0;
if (valid) {
    $boxes.each(function (idx, box) {
        var $box = $(this),
            $qtns = $box.find('.question');
        if ($qtns.length == 0) {
            valid = false;
            return false;
        }
        valid = $qtns.filter(function () {
            return $(this).find('input[type="radio"]').length < 2;
        }).length == 0;
        if (!valid) {
            return;
        }
    })
}
alert(valid)

Демо: скрипка

  • 0
    UH: D позвольте мне проверить это: D я думал, что это может быть одна цепочка SMART JQuery: D
  • 0
    @mariotanenbaum может быть .... Я не особо задумывался об этом ....
Показать ещё 8 комментариев
1

.filter должен работать:

$(".box .question").filter(function() {
    return $(this).find(":radio").length >= 2;
});
  • 0
    к сожалению дело не проходит ... :(
  • 0
    Как так? Что происходит?
Показать ещё 3 комментария

Ещё вопросы

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