選択されている要素と選択されていないすべての要素のコレクションを作成したいと思います。
dom 要素はいくつかのmultiple select
.
それぞれに同じユーザーがいます。
私の目標は、すべてのユーザーのコレクションを作成し、選択されたユーザーに特定の値を持つ属性を追加することです。
ここに私のコード js コード (1) があり、ここにリンクhttp://jsfiddle.net/vxRtb/9/があります。
私のコードは機能しますが、最初の選択だけですべてのユーザーを取得する必要がないため、コードを乾燥させたいと思います。
次のjsコードを乾燥させる方法のヒントはありますか?
詳細については、js コードのコメントをお読みください。ありがとう
PS:
1)私は使用jQuery
しunderscore
ています.2)サーバーから、jsfiddle.net/vxRtb/9と同じようにhtmlコードを取得します
$(function () {
var $selectElements = $('form .controls select');
var userCollection = [];
// Subroutine_1
// TODO Subroutine_1 and Subroutine_2 seems too close; any idea how to dry this code?
$.each($($selectElements[0]), function (i, teamElement) {
var $users = $(teamElement).find('option')
$.each($users, function (i, user) {
userCollection.push({
id: $(user).val(),
name: $(user).text(),
});
});
});
// Subroutine_2
$.each($selectElements, function (i, teamElement) {
var $teamElement = $(teamElement);
//var teamId = $teamElement.attr('id');
var teamName = $teamElement
.parent().parent().closest('.controls')
.find('input').val();
var $users = $teamElement.find('option:selected');
$.each($users, function (i, user) {
_.where(userCollection, {id: $(user).val()})[0].team = teamName;
});
});
console.log(userCollection);
});