0
0

More than 3 years have passed since last update.

input:hiddenを少し便利にする

Last updated at Posted at 2021-07-04

最近input:hiddenを使う機会があったので良い方法がないか模索

注意

初投稿なので至らないところがあると思いますが、過不足がありましたらコメントをお願い致します。
コードを使う場合は、ご自由に採用・改変してご利用ください。
ご利用に対するあらゆる影響に関して責任は持てません。

目標

input:hiddenを少し扱いやすくする。
複数の要素がある場合は、input:hiddenのnameをkeyとするハッシュオブジェクトを返す。
要素名を指定した場合は、input:hidden[name="name"]のjQueryオブジェクトを返す。

環境

  • Ubuntu 20.4
  • HTML5
  • CSS3
  • javascript
  • jQuery 3.6.0
  • npm 7.17.0
  • Pug

試したこと

hiddenを手軽に扱う小さいモジュールを書く

(function( $ ) {
    $.fn.hiddens = function(name) {
        var $hiddens = this.children("input:hidden");

        var hids = new Object();
        if(name) {
            hids = $(this.children('input:hidden[name="' + name + '"]')[0]);
        } else {
            for(let i=0; i<$hiddens.length; i++) {
                let h = $hiddens[i];
                hids[h.name] = $(h);
            }
        }
        return hids;
    };
})( jQuery );

使い方

<!-- 略 -->

<form id="test">
  <input type="hidden" name="spaceA" value="A" />
  <input type="hidden" name="spaceB" value="B" />
</form>

<!-- 略 -->
// ex1 : 指定なし => ハッシュ(key=name, value=jQueryオブジェクト)
var hids = $('form#test').hiddens();
var hidA = hids['spaceA'];
var hidB = hids['spaceB'];
console.log("tag info: ", hidA.attr("type"), hidA.attr("name"), hidA.attr("value")); // tag info: hidden spaceA A
console.log("hidden A: ", hidA.val()); // hidden A: A
console.log("hidden B: ", hidB.val()); // hidden B: B

// ex2 : 要素を指定 => jQueryオブジェクト
var hid = $('form#test').hiddens("spaceA");
console.log("tag info: ", hid.attr("type"), hid.attr("name"), hid.attr("value")); // tag info: hidden, spaceA A
console.log("hidden A: ", hid.val()); // hidden A: A
hid.val("hiddens");
console.log("update A: ", hid.val()); // update A: hiddens

結論

個別に扱う場合は、少し扱いやすくなった気がする(個人の感想です)。
idでも指定できると良いが要改良。
複数の要素にアクセスしたい場合は、従来通り。

$('form#id:hidden[name^="prefix"]').each(function() { /* 処理 */ });
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0