Javascript jQuery find()在IE和FF中的顺序不同

Javascript jQuery find()在IE和FF中的顺序不同,javascript,jquery,dom,Javascript,Jquery,Dom,我试图在我的页面上找到第一个输入字段,这些字段有一个定义了类的父div。因此,按照定义的顺序获取输入对我来说很重要。不幸的是,Firefox给我的元素顺序与Internet Explorer相反。有什么办法解决这个问题吗 例如: <html> <head> <!-- Include jQuery --> </head> <body> <form> <div class="inputCon

我试图在我的页面上找到第一个输入字段,这些字段有一个定义了类的父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>

var errorContainers=$('input:visible,div.selector')。父项('.inputContainer')。筛选器('.error');
var firstErrorInput=$(errorContainers).find('input,div.selector').first();
警报($(firstErrorInput.attr('name'));
您的代码在Chrome(16)、Firefox(6)和IE 8(有无兼容模式)中提醒“input3”

用计算机进行测试

请注意,您正在多次包装选择器/所选元素,如
$($($('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'));
下面的选择器应该是使用CSS类
inputContainer
error
获取元素中的第一个
input

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

在尝试读取DOM之前,请确保已加载它。

为什么不
$('.inputContainer.error>input')。首先()
?这应该会使它们井然有序。我将代码编辑为一个工作示例<代码>$('.inputContainer.error>input').first()不起作用,因为我没有得到input3的错误。使用FF alert()返回input1,即返回input3。@CannyDuck:提供了我认为正确的输出。这与@FelixKling的上述内容之间的唯一区别是删除了
。。。这是你想要的吗?你肯定在使用一个看起来非常迂回的选择器集…@CannyDuck:啊,你的句子中有一个定义了类的父div,我被它难住了。。。
input3
的父元素是
span
元素。当然,如果输入元素不是子元素,请省略子选择器,就像@Chris所做的那样。好的,添加了“error”类,我明白你的意思,但是你的脚本很混乱,我不确定它是否符合你的要求。我的建议(在答案中)是,在DOM完成加载后,首先输入
input
。你还想做什么?你太棒了。这就像一个符咒。