Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:用一个链定义多个变量?_Javascript_Jquery - Fatal编程技术网

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

Javascript jQuery:用一个链定义多个变量?,javascript,jquery,Javascript,Jquery,可以用一个jQuery链定义多个变量吗 var sectionTable = jQuery("#sectionsTable"); var sectionTableRows = sectionTable.find("tr"); var sectionTableColumns = sectionTableRows.find("td"); 如果可能的话,我不知道语法会是什么,但是如果你使用上面的3个变量,你如何链接它们,这会被认为是好的实践吗 非常感谢 克里斯 编辑:哇,谢谢你的评论。抱歉说得含糊不

可以用一个jQuery链定义多个变量吗

var sectionTable = jQuery("#sectionsTable");
var sectionTableRows = sectionTable.find("tr");
var sectionTableColumns = sectionTableRows.find("td");
如果可能的话,我不知道语法会是什么,但是如果你使用上面的3个变量,你如何链接它们,这会被认为是好的实践吗

非常感谢

克里斯

编辑:哇,谢谢你的评论。抱歉说得含糊不清,我想要的是从父变量定义子变量的更好方法(如果存在的话)。这就是为什么我想到使用链条,并想知道是否存在一种方法。谢谢你的建议。

你为什么要这么做

定义这三个变量有什么不对

(不,你不能)


如果您根本不需要
sectionTable
sectionTableRows
变量,您当然可以这样做

var sectionTableColumns = jQuery("#sectionsTable").find("tr").find("td");
通过使用,可以将其缩短为:

var sectionTableColumns = jQuery("#sectionsTable tr td");

我唯一想到的是一个var声明,比如:

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

您可以将其重写如下:

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

但当然,这只有在实际使用这三个变量时才有用。

我可能不太理解您想要或需要什么,但您可以为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();

但是,这意味着您只需要访问这些元素一次。如果您以后需要在代码中访问它们,出于几个性能原因,您总是应该将结果引用存储在变量中。

如果您真的想,任何事情都是可能的:

在我的头顶上,你可以尝试这样做:

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);
当然,如果不指定任何名称空间,变量将是全局的(将附加到窗口对象)


无论如何,我不鼓励您使用这些示例,因为为了减少等号和
var
声明而降低代码的可读性没有多大意义。

有可能的话,请参阅@Mathias Bynenspost@steven.yang:那不是一条单链,正如《OP》中所要求的那样。@steven我认为《OP》对他的意思相当不清楚。这对我来说似乎是一个非常有用的答案,不值得投反对票。Mathias的回答也很好,这取决于“链接”的含义。只是想从父母那里找到定义孩子的最佳方法。谢谢你的回答。这基本上就是我的意思,但我想我想要的是关于我是否正确定义了这3个变量,或者是否有更好的方法的意见。@Chris在这种情况下,你的方法很好。代码是可读的,您可以根据前面的变量定义变量,从而使代码更高效(就像一种微型缓存)。非常感谢。我只是在学习,并认为这是一个重要的问题。感谢大家的建议。这是不是比我用的例子更好?@Chris唯一的区别(除了“单个”
var
声明)是这个例子使用的函数调用更少(只有三个),因为它避免了
.find()
,而是使用上下文。这使它的效率略高一些。