【问题标题】:jQuery matched set to stringjQuery匹配设置为字符串
【发布时间】:2010-07-18 18:37:36
【问题描述】:

我需要序列化匹配的集合,以便将其值传递给我的 rails 应用程序。

匹配的集合代码是(返回每个未初始化的select元素的父div):

jQuery('select').filter(function(index){
     return jQuery(this).val() == 0;}).closest('div')

对于序列化,我真的只需要每个匹配元素的 id,所以我尝试了:

jQuery('select').filter(function(index){
     return jQuery(this).val() == 0;}).closest('div').attr('id')

不幸的是,attr() 仅适用于匹配集中的第一个元素。

由于生成的 javascript 将通过 rails'remote_function :with 发送,我相信 javascript 只能是一个语句。

如何对匹配的集合进行序列化或字符串化?

【问题讨论】:

  • 那么,您想要一个包含所有选定 div 的 ID 的字符串吗? ... 用逗号分隔?
  • 我对你的意思有点模糊:“我相信 javascript 只能是一种说法”
  • @morgancodes,对于 Rails,javascript 作为字符串传递。当我尝试传递多个语句时,即( var test_var; jQuery(...) )它会静默失败。
  • “只有一个声明”对我来说听起来有点可疑。这个javascript是通过创建一个新的脚本标签来加载的吗?还是正在评估的ajax请求?在任何一种情况下,浏览器不应该只是默默地失败,它应该兼容。我只是确保这是其他人也遇到的真正限制。

标签: jquery ruby-on-rails serialization


【解决方案1】:

为了多样化,这里是使用map的答案:

result = jQuery('select')
    .filter( function(index){
        return jQuery(this).val() == 0;
    })
    .closest('div')
    .map( function(){
        return this.id;
    })
    .get()       // stop here if you want an array
    .join(',');  // or here if you want a string

【讨论】:

    【解决方案2】:

    为了更多多样性,这里有一个涉及较少循环的:

    var idString = $('select').map(function(){
        var select = $(this);
        return select.val() == 0 ? select.closest('div').attr('id') : null;
    }).get().join(',');
    

    【讨论】:

      【解决方案3】:
      var result = [];
      
      jQuery('select').filter(function(index){
        return jQuery(this).val() == 0;
      }).closest('div').each( function() {
        result.push(this.id);
      });
      
      var resultStr = result.join(',');
      

      【讨论】:

        猜你喜欢
        • 2012-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-19
        • 1970-01-01
        • 2015-08-05
        • 2011-07-16
        相关资源
        最近更新 更多