jQueryで複数の要素オブジェクト(というの?)を取得するケースで、jQueryオブジェクトとして扱えなくなっていることが気持ち悪く、ここをどうにかできないかという話です。
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.1 …
<input type="text" id="ii1" name="nn" value="マツコ">
<input type="text" id="ii2" name="nn" value="竹田">
<input type="text" id="ii3" name="nn" value="小梅太夫">
<script>
jQuery(function ($) {
alert($("#ii1").val()); // (0)
alert($("[name=nn]:eq(1)").val()); // (1)
alert($("[name=nn]:first-child").val()); // (2)
alert($("[name=nn]")[2].value); // (3)
alert($("[name=nn]").get(1).value); // (4)
});
</script>
このソースで、(0)はいいとして、(1)(2)のようにオブジェクトが一つしか返らないような場合には、「.val()」メソッドが使えます。しかし(3)(4)の場合には、少なくともこのままでは「.val()」メソッドが使えないため、Elementオブジェクトのvalueプロパティを使用しています。
値を取得するコードで「.val()」「value」が混在しているのが気持ち悪く、「value」に統一したいです。ちなみに実際には「$("[name=nn]")」のように取得したあと、for文でまわして処理するケースが多いです。
「$("[name=nn]")」で取得し、オブジェクトの件数をカウントしたあと苦肉の策で、for文の中で「$("[name=nn]:eq(" + i + ")").val()」等と書いたこともありますが、むしろ読みにくくなってしまっています。これだったらまだvalueプロパティを使う方がいいかと思います。
「$("[name=nn]")」で複数のオブジェクトを取得した後で、それぞれのオブジェクトに「.val()」を使う方法はありますでしょうか?あるのなら具体的に教えてください。
よろしくお願いします。
No.3
- 回答日時:
そもそも要素を取得するのにjQueryを使わなければいいのでは?
var $ = document.querySelectorAll.bind(document)
jQueryの質問をしているのに、jQueryを使わなければいいとはなかなかアバンギャルドな回答ですね。
ありがとうございました
No.2
- 回答日時:
いっぺんに処理するところ以外は
$("[name=nn]")で取るんじゃなくって
単体で取るのが一番じゃない?
この回答への補足
「いっぺんに処理するところ以外」というのがどういう状況なのかよく分かりませんが、配列の長さが変わる可能性があり、その最初の要素だけ飛ばして繰り返し同じ内容の処理をしたいというときには単体で取るというのは適さないと思います。配列の長さが変わるたびにコードを書き換えなければならなくなってしまうので、
補足日時:2014/10/24 12:14No.1
- 回答日時:
eachとか使わないの?
いちいちオブジェクトの件数調べたりする必要ないけど。
$('.hoge').each(function(index) {
alert(index+' = ' + $(this).val());
});
みたいな。
この回答への補足
質問文中に間違いがありました。
このスペースをお借りして訂正させていただきます。
# 値を取得するコードで「.val()」「value」が混在しているのが気持ち悪く、
# 「value」に統一したいです。
は間違いです。
# 「.val()」に統一したいです。
が正しいです。
なるほど。eachを使えばいいんですね。単純なループはこれでいけました。ソースも書き換えました。しかし、1行飛ばして開始するケースや複数のオブジェクトを同時に処理する場合(表形式で1行にテキストボックスが2つ、selectリストが1つとか)などやや複雑な場合には、あまり適さないように感じました。なので、そちらは今のところもとのコードのままにしています…。
jQueryは9/9にはじめたばかりでまだ一ヵ月半くらいしかやっていないことと、一人でやっているので「jQueryの普通」がまだ分からなかったりします。
ですので助かりました。ありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
新しくフォルダを作成したい
-
doPostBack 関数について
-
【jQuery】input nameの文字列...
-
Formの「action」属性を取得し...
-
JavaScriptで連想配列のマージ
-
ファイル選択ダイアログが表示...
-
プルダウン 項目が多いので先頭...
-
dijit.form.ComboBoxについて
-
return trueとreturn falseの用...
-
javascript による POST 送信時...
-
テキストボックスに入力された...
-
プルダウンメニューを表の中に...
-
VBSでブラウザ上のテキストボッ...
-
ラジオボタンの選択で解答・点...
-
追加ボタンを押した際に ok ボ...
-
netscapeでもinnerTextやinnner...
-
tableの任意行にfocusをあてる
-
value内に変数を入れたい
-
submitするとなぜか2度実行する
-
JavaScriptで特定のtdタグにcla...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【jQuery】input nameの文字列...
-
二つの入力欄に、同時に同じ文...
-
新しくフォルダを作成したい
-
name属性のないformタグの、中...
-
入力フォームに半角スペース以...
-
ラジオボタンでクリックした値...
-
ASP.NETでNAME属性を固定にしたい
-
JavaScriptにて動的に配列を作...
-
cookie使用時にundefinedと表示...
-
submitボタン押下時にPOSTされ...
-
Javascriptでのbuttonのname属...
-
エクセル マクロ submitについて
-
jqueryでtextareaのcols、rows...
-
javascriptの値をformのinput h...
-
動的にTabindexの値を変えたい!
-
テキストボックスの入力をリセット
-
ファイル選択ダイアログが表示...
-
現在フォーカスのオブジェクト...
-
ボタンを押すとテキストボック...
-
テキストエリアをenterキーでフ...
おすすめ情報