如何在没有保护子句的情况下使用jQuery选择和处理元素?

时间:2011-05-31 11:56:14

标签: jquery jquery-selectors

我正在用jQuery重写一些旧的JavaScript,并想知道如何更清晰地编写它。

我开始使用的脚本是:

for (var i = 0; i < form1.elements.length; i++) {
    var element = form1.elements[i];
    alert(element.id)

    if (Left(element.id, 15) === 'selHeaderFilter' || 
        element.id === 'ddlHierarchy1') {
        garrHeaderState[element.id] = element.selectedIndex
    }
}

我不确定为什么它被写成了,但我认为它只是试图将2个元素添加到一个数组(全局声明)。

我对此的第一次尝试给了我:

var hierarchy = $('[id$=ddlHierarchy1]');
var headerFilter = $('[id*="selHeaderFilter"]');

if (hierarchy)
    garrHeaderState[hierarchy.attr('id')] = hierarchy.val();

if (headerFilter)
    garrHeaderState[headerFilter.attr('id')] = headerFilter.val();

但我真的不喜欢声明层次结构的过程,只要它存在,我就可以将其选择的索引添加到数组中。有没有更好的方法来编写这段代码?

2 个答案:

答案 0 :(得分:4)

你可以使用jQuery的每个函数。

$('[id$=ddlHierarchy1], [id*="selHeaderFilter"]').each(function(){
    var item = $(this);
    garrHeaderState[item.attr('id')] = item.val();
});

答案 1 :(得分:1)

未测试:

$('[id$=ddlHierarchy1], [id*="selHeaderFilter"]').each(function(){
    garrHeaderState[this.id] = $(this).val();
})

编辑:根据其他帖子的编辑进行更新,以避免缓存和重复运行jQuery函数