jQuery найти () другой порядок в IE и FF - PullRequest
0 голосов
/ 03 января 2012

Я пытаюсь найти первые поля ввода на моей странице, у которых есть родительский div с определенным классом. Поэтому, чтобы получить входные данные в порядке их определения, для меня важно. К сожалению, Firefox дает мне элементы в обратном порядке, чем Internet Explorer. Есть идеи, чтобы это исправить?

Пример:

<html>
<head>
    <!-- Include jQuery -->
</head>
<body>
    <form>
        <div class="inputContainer">
        </div>
        <div class="inputContainer error">
            <input name="input1"/>
        </div>
        <div class="inputContainer">
            <input name="input2"/>
        </div>
        <div class="inputContainer error">
            <span>
                <input name="input3"/>
            </span>
            <span>
                <input name="input4"/>
            </span>
        </div>
    </form>
    <script>
        var errorContainers = $('input:visible, div.selector').parents('.inputContainer').filter('.error');
        var firstErrorInput = $(errorContainers).find('input,div.selector').first();
        alert($(firstErrorInput).attr('name'));
    </script>
</body>
</html>

1 Ответ

2 голосов
/ 03 января 2012

Ваш код предупреждает «input3» в Chrome (16), Firefox (6) и IE 8 (с режимом совместимости и без него).

Протестировано с; http://jsfiddle.net/sR97k/

Обратите внимание, что вы оборачиваете ваш селектор / выбранные элементы несколько раз, например $($($('selector'))), и в этом нет необходимости.

var errorContainers = $('input:visible, div.selector').parents('.inputContainer').filter('.error');
var firstErrorInput = $(errorContainers).find('input, div.selector').first();
alert($(firstErrorInput).attr('name'));

Этого будет достаточно;

var $errorContainers = $('input:visible, div.selector').parents('.inputContainer').filter('.error');
var $firstErrorInput = $errorContainers.find('input, div.selector').first();
alert($firstErrorInput.attr('name'));

Следующий селектор должен получить первый input в элементе с CSS-классами inputContainer и error;

$(document).ready(function() {
    var x = $('.inputContainer.error input').first().attr('name'); 
});

Прежде чем пытаться читать с него, убедитесь, что DOM загружен.

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