【问题标题】:Add selector to object already stored in variable将选择器添加到已存储在变量中的对象
【发布时间】:2013-10-05 13:36:10
【问题描述】:

我是 jQuery 新手,如果我的词汇有错误,请原谅,请纠正我,以便我可以正确地学习。

我正在尝试使用最佳做法来优化性能。我被告知尽可能将静态对象存储在变量中。我正在尝试存储父对象#mytable,然后从那里向下导航到子对象。

var count=1;
$('#eachselector').each(function(){

  var MyTable = $('#mytable'+count);
  $(MyTable+' td[condition=true][condition2=true]').attr('do', 'stuff');
  $(MyTable+' table[condition=true][condition2=true]').attr('do', 'stuff');

  count++;
});

这给了我错误“未捕获的异常:语法错误,无法识别的表达式:[object Object]”。

我怀疑在 each() 内部调用时我将 MyTable 视为字符串,但不确定语法应该是什么样子。

谢谢!

【问题讨论】:

  • 您将一个字符串连接到一个 jQuery 对象 (myTable)。

标签: jquery variables object syntax


【解决方案1】:

改用这个:

var MyTable = $('#mytable'+count);
MyTable.find('td[condition=true][condition2=true]').attr('do', 'stuff');
MyTable.find('table[condition=true][condition2=true]').attr('do', 'stuff');

这使用 jQuery 的 .find() 函数来搜索 $('#mytable'+count) 的后代。您的代码不起作用的原因是 MyTable 是一个 jQuery 对象而不是字符串。

您也可以使用$('selector', MyTable),但在内部它只是映射到.find() 函数。

【讨论】:

  • 这是伟大的乔,经过测试并且完美运行。但是,为了学习,是否不能像我尝试的那样将其他选择器直接连接到变量?我认为这是因为我将它视为字符串而不是对象。对吗?
  • @Joe - 没问题。这是不可能的,因为myTable 是一个对象,但您试图将它连接起来,就像它是一个字符串一样。例如,这将起作用:$('#mytable'+count+' td[condition=true][condition2=true]'),因为您只是在连接字符串。然而,这种做法更混乱,更不优化。要更详细地查看MyTable,请在定义后使用console.log(MyTable);,然后使用浏览器的开发人员工具查看它。
  • 优秀。事实上,$('#mytable'+count+' td[condition=true][condition2=true]') 是我对这段代码的原始草稿,然后我想回去实现一个更好的方法。非常感谢乔非常有帮助!
【解决方案2】:

使用下面的代码:

  $('td[condition=true][condition2=true]', MyTable).attr('do', 'stuff');

这表示将所有条件1和条件2的td的'do'属性设置为真值'stuff'

【讨论】:

    猜你喜欢
    • 2011-05-06
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 2012-09-12
    • 2020-07-07
    • 2013-08-08
    相关资源
    最近更新 更多