2016-04-10 12 views
3

Gizli öğe öğesine bir HTML öğesinin adının dizesinin ilişkilendirici dizi nesnesini istiyorum.Dizi anahtarını Javascript'teki değer işlevinde kullanın?

var fieldNames2inputElements = { 
    'FirstName' : document.getElementsByName('FirstName')[0], 
    'LastName' : document.getElementsByName('LastName')[0], 
    ... 
}; 

... öylesine Sanki zaten bunu yapmanın daha KURU yolu olmalı bilerek, kendime başımı titriyorum. Baska öneri? Bir ilişkilendirici dizinin dize anahtarını, bu anahtarın değerinde bulunan bir şeyin parametresi olarak nasıl kullanırım?

BTW: Bu ad özniteliğine sahip gizli giriş öğelerinin kimliğine veya başka bir seçme yöntemine sahip olduğundan emin değilim.

function getByName(names) { 
    return names.reduce(function(ret, name) { 
     ret[name] = document.querySelector('input[name="'+ name +'"]'); 
     return ret; 
    }, {}); 
} 

var fieldNames2inputElements = getByName(['FirstName', 'lastName', '...']); 
+0

En azından DOM'a, performansa göre daha iyi dokunursunuz. Bu nedenle, her iki ad ve soyadı için bir tane olmak üzere yalnızca iki 'document.querySelectorAll()' işlemi yapmalısınız. Sonra Array.prototype.map.call (firstNames, c => {...}); 've sonra' lastNames' için de aynı şeyi kullanmak bu işi yapmanın bir yoludur. – Redu

cevap

5

Bir nesne hedef elementlerin adı kabul eder ve döner bir yardımcı işlev tanımlayabilir

0

Bu parametre

for (var i = 0, elems = document.querySelectorAll("input[name$=Name][type=hidden]") 
 
    , fieldNames2inputElements = {} 
 
    ; i < elems.length; i++) { 
 
    fieldNames2inputElements[elems[i].name] = elems[i] 
 
}; 
 
console.log(fieldNames2inputElements)
<input name="FirstName" type="hidden" /> 
 
<input name="LastName" type="hidden" />
olarak seçici "input[name$=Name][type=hidden]" ile document.querySelectorAll() bir for döngü kullanabilir:

1

Yazabilirim (es6 ok işlevleriyle):

var fieldNames2inputElements = ['FirstName', 'LastName'] 
    .reduce((o, name) => (o[name] = document.getElementsByName(name)[0], o), {}); 
İlgili konular