2013-02-06 55 views
0

元素單獨的數組比方說,我有一個形式與一些投入,我用一個相當標準的jQuery語句把他們都弄到:按屬性

var inputs = $("#some-form").find("input") 

現在,我想採取行動這些輸入,但我們可以說我想將單選按鈕和/或複選框組視爲一件事。我怎樣才能將inputs分成按屬性分組的元素,如name。請注意,我不知道處理開始時名稱會是什麼。

在人力方面,我需要做的邏輯做線沿線的東西:

讓我遍歷輸入列表。對於每個輸入,讓我檢查 以查看它是否已被添加到佔位符數組。如果是這樣, 保持獨立。如果不是,將它和所有名稱都加上 佔位符數組(作爲子數組)。

從本質上講,我想是這樣的:

[[<input type="text" name="name1">], [<input type="radio" name="name2">,<input type="radio" name="name2">]] 

回答

1
function getInputsPartitioned(formEl) { 
    var inputEls = formEl.querySelectorAll("input"); 

    var inputsByName = Object.create(null); 
    for (var i = 0; i < inputEls.length; ++i) { 
     var inputEl = inputEls[i]; 
     var name = inputEl.name; 

     if (!(name in inputsByName)) { 
      inputsByName[name] = []; 
     } 
     inputsByName[name].push(inputEl); 
    } 

    // `inputsByName` now looks like this: 
    // { 
    //  name1: [<input type="text" name="name1">], 
    //  name2: [<input type="radio" name="name2">, <input type="radio" name="name2">] 
    // } 

    // To get it into arrays: 

    return Object.keys(inputsByName).map(function (name) { 
     return inputsByName[name]; 
    }); 
} 

獎勵:不需要jQuery。

2

嘗試使用過濾器內部屬性選擇。

var $formInput = $('#some-form').find('input'); 
var inputText = $formInput.filter('[type=text]') 
var otherInput = $formInput.filter("[type=radio]") 
          .add($formInput.filter('[type=checkbox]')); 

甚至更​​好

var otherInput = $formInput.filter(function() { 
        return this.type == 'radio' || this.type == 'checkbox'; 
        }); 

DEMO:http://jsfiddle.net/utwaf/

我怎麼可以拆分輸入出成一個屬性分組元素,說名

var elements = []; //elements by name 
var $formInput = $('#some-form').find('input'); 
elements.push($formInput.filter(function() { 
    return this.name == 'name1'; 
}); 
elements.push($formInput.filter(function() { 
    return this.name == 'name2'; 
}); 

注意:推入數組的所有元素都是jQuery對象。

+0

:複選框,:收音機 – salexch

+0

對不起,我應該澄清。我開始處理時不知道輸入的名稱。基本上,我希望能夠讓代碼說:「好吧,我有一個輸入。檢查以確保我還沒有將它添加到輸入數組中,如果沒有,添加它和所有相同的名稱到陣列。「 –