jQuery:用一个链定义多个变量?

时间:2011-11-16 10:45:06

标签: javascript jquery

是否可以使用单个jQuery链定义多个变量?

var sectionTable = jQuery("#sectionsTable");
var sectionTableRows = sectionTable.find("tr");
var sectionTableColumns = sectionTableRows.find("td");

如果有可能,我不知道语法是什么,但如果你把3个变量放在上面,你怎么能把它们链接起来呢?它会被认为是好的做法吗?

非常感谢

克里斯

编辑:哇,感谢所有评论。对于模糊不清,我所追求的是从父变量定义子变量的更好方法(如果存在)。这就是为什么我想到使用链条并想知道是否存在一种方式。谢谢你的好建议。

5 个答案:

答案 0 :(得分:5)

我可能并不真正理解你想要什么或需要什么,但你可以为jQuery包装集链接任何函数并“结束”它,然后“返回”到前一集。例如:

jQuery("#sectionsTable").css('background-color', 'red')
.find('tr').css('background-color', 'yellow')
.find('td').css('background-color', 'black')
.end() // back to 'tr'
.doSomething()
.end() // back to '#sectionsTable'
.doSomething();

但是,这意味着您只需要访问一次这些元素。如果您稍后需要在代码中访问它们,那么始终应将结果引用存储在变量中,原因有多种。

答案 1 :(得分:5)

如果你真的想要,一切皆有可能:

在我的头脑中,你可以尝试做这样的事情:

var sectionTable,
    sectionTableRows, 
    sectionTableColumns = $('td', (sectionTableRows = $('tr',(sectionTable = $('#sectionsTable')))));

另一个想法是构建一个迷你插件,将当前jquery对象分配给对象的某个字段:

jQuery.fn.assignTo = function(variableName,namespace){
    var ns = namespace || window;
    ns[variableName] = this;
    return this;
}

通过这种代码安静,您可以执行以下操作:

var sections = {};
jQuery("#sectionsTable")
    .assignTo('sectionTable',sections)
    .find("tr")
        .assignTo('sectionTableRows',sections)
        .find("td")
            .assignTo('sectionTableColumns',sections);

console.log(sections.sectionTable);
console.log(sections.sectionTableRows);
console.log(sections.sectionTableColumns);

当然,如果你没有指定任何命名空间,那么变量将是全局的(将附加到window对象);

任何方式,我都不鼓励您使用这些示例,因为使代码的可读性恶化并支持更少的等号和var声明并没有多大意义。

答案 2 :(得分:4)

您可以按如下方式重写:

var $sectionTable = $('#sectionsTable'),
    $sectionTableRows = $('tr', $sectionTable),
    $sectionTableColumns = $('td', $sectionTableRows);

但是,当然,只有在您真正使用所有这三个变量时,这才有用。

答案 3 :(得分:1)

我唯一想到的是 one-var声明,例如:

var sectionTable = jQuery("#sectionsTable"), 
sectionTableRows = sectionTable.find("tr"), 
sectionTableColumns = sectionTableRows.find("td");

答案 4 :(得分:0)

你为什么要这样做?

定义三个变量有什么问题?

(不,你不能)。


如果您

sectionTable

使用descendant selector,可以简化为;

sectionTableRows