2010-07-18 65 views
1

我需要序列化一個匹配的集合,以便它的值可以傳遞給我的Rails應用程序。jQuery匹配設置爲字符串

匹配的一套代碼(返回每個未初始化的選擇元素的父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只能是一個聲明。

匹配集怎樣才能被序列化或串串化?

+0

所以,你想要一個包含所有選定div的ID的單個字符串? ... 被逗號隔開? – James 2010-07-18 18:45:49

+0

我對你的意思有點模糊:「我相信javascript只能是一個聲明」 – morgancodes 2010-07-18 18:54:32

+0

@morgancodes,對於rails而言,javascript會以字符串形式傳遞。當我嘗試傳遞多個語句,即(var test_var; jQuery(...))時,它會默默地失敗。 – SooDesuNe 2010-07-18 19:00:54

回答

2

對於各種各樣的緣故,這裏是一個使用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 
0
var result = []; 

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

var resultStr = result.join(','); 
1

對於品種的緣故,這裏是一個以較少的循環涉及:

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