jQueryのセレクターで、INPUT要素を
"[name=ipt]:nth-of-type(1)"
などと指定したいです。
- (0)のように、INPUT要素ではなくLI要素なら取得できました。
- (1)のように、セレクターだけではなく、eq()も使えば取得できました。が、後続の処理の都合上、セレクターを1度使うのみで取得したいです。
- (2)(3)のような記述で指定したいのですがうまくいきません。
- 関係ないとは思いますが、Chrome, Firefox, IE, Edgeの全てで発生しています
アドバイス、よろしくお願いします。
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="utf-8"> 5 <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 6</head> 7<body> 8 9<ol> 10 <li>li1</li> 11 <li>li2</li> 12 <li>li3</li> 13</ol> 14 15<ul> 16 <li><input type="text" name="ipt" value="012"> 17 <li><input type="text" name="ipt" value="123"> 18 <li><input type="text" name="ipt" value="234"> 19</ul> 20 21<script> 22$(function() { 23 console.log("(0)これはできる"); 24 console.log($("ol li:nth-of-type(1)").text()); 25 console.log($("ol li:nth-of-type(2)").text()); 26 console.log($("ol li:nth-of-type(3)").text()); 27 console.log(""); 28 29 console.log("(1)これもできる"); 30 console.log($("[name=ipt]").eq(0).val()); 31 console.log($("[name=ipt]").eq(1).val()); 32 console.log($("[name=ipt]").eq(2).val()); 33 console.log(""); 34 35 console.log("(2)これがやりたい。しかしうまくいかない"); 36 console.log($("[name=ipt]:nth-of-type(1)").val()); 37 console.log($("[name=ipt]:nth-of-type(2)").val()); 38 console.log($("[name=ipt]:nth-of-type(3)").val()); 39 console.log(""); 40 41 console.log("(3)これもできない…"); 42 console.log($("li input:nth-of-type(1)").val()); 43 console.log($("li input:nth-of-type(2)").val()); 44 console.log($("li input:nth-of-type(3)").val()); 45}); 46</script> 47 48</body> 49</html>
>後続の処理の都合上、セレクターを1度使うのみで取得したいです。
このあたりを具体的に書かれないことにはアドバイス得るの難しいと思います。
>後続の処理の都合上、セレクターを1度使うのみで取得したいです。
jQuery pluginを使用している等、jQuery.prototypeに生えたメソッドを使用する目的があると想像して回答しましたが、要件を具体化した方が回答を得やすいのは確かだと思います。
想像力を要求する質問は質問者が求めていない回答/代替案が出てくる場合があります。
>要件を具体化した方が回答を得やすい
「セレクターを1度使うのみで取得」が要件です。要件の背景を書くとこのサイトでは、背景にイチャモンを付けたり関係ない代替案を書いてくる人がいるので、そういう回答を排除するためにシンプルに要件のみを書いたつもりでした。「後続の処理の都合上」も書かないほうが良かったかもしれませんね。
むしろ書かれてないほうが問題では。「前提や背景を考慮しない関係ない代替案」を引き出します。
赤の他人にそこを正確に推し量るのは無理です。
それに「後続の処理の都合上」がなかったとしても「別のやり方がでできてるのにあえてなぜそうしたいの?」という疑問を持つのが自然かと。
要件から外れた回答でお互いの時間を無駄にしたくないですしね。「自分のやりたいことだけに答えればいい」とかエスパーを強いるのは質問者の傲慢とも思います。
> 要件の背景を書くとこのサイトでは、背景にイチャモンを付けたり関係ない代替案を書いてくる人がいるので、そういう回答を排除するためにシンプルに要件のみを書いたつもりでした。
次からこれを書いてくれると助かります。
私が巡らした考えの大半は必要なかったようですが、それが質問文から読み取れませんでした。
>私が巡らした考えの大半は必要なかったようですが
そんな事はありません。think49さんの回答は確かに質問に直結する回答ではありませんでしたが、「:nth-of-type」がなぜ駄目だったのか理解でき参考になりました。ありがとうございました。
前回Visual Studio Codeで改行コードを表示させる方法を質問しました。その際に改行コードを表示させたい目的を書いてしまったところ、改行コードを表示させる方法には答えずに、構文チェックツールを使えばいいとか改行を統一させるツールを使えばチェックしなくて済むなど本質的ではない回答がつきました。また、回答は一度もせずに他の人の回答のコメント欄などに計18回もコメントするひどく粘着質な人にも絡まれました。
>次からこれを書いてくれると助かります
その説明を含め余計なことを書くとその部分に絡んでくる人がこのサイトでは少なからずいます。期待しない回答や不要ないざこざを極力避けるために、質問したいことだけを書くようにしたいと思っています。…のですが、「この質問ではセレクターだけでできるのかという点だけに限定させていただきます。もしも、不可能だということがわかったときには代替案の質問を新たにします」という注意書きでもしておけばいいのかもしれませんね。
私の回答は
A. 「:eq() 擬似クラスの公式URL」「サンプルコード」が質問に直結する回答
B. jQuery#get(), jQuery#eq(), jQueryObject[0] が「関係ない代替案」で意に沿わない回答
と認識しており、結果的に「B. が不要だった」と回答後に理解したのが現状です。
代替案を提案するのは、質問に直結する回答が「ない」もしくは「問題がある」からであって、善意で私は提案しています。
私の立場からすれば善意で提案した内容が「関係ない代替案」といわれてしまうのは腑に落ちないわけで、後出しせずに初めから方針を明示して欲しかったのが本音です。
書き方の問題もあるかもしれませんが、例えば、
- 不可能なら不可能とだけ回答をお願いします。
- 代替案は自分で調べます。
というように、「自分でやる範囲」を明文化しておけば、好意的に受け取られるのではないかと思います。
少なくとも私は自助努力意識の高い方と好意的に捉えます。
私は最初に、「eq()も使えば取得できました。が、後続の処理の都合上、セレクターを1度使うのみで取得したいです」という文と「eq()」を使うコードを書いています。ですので「B. が不要だった」に関しては、そのあたりを読んで理解してほしかったです。
回答3件
あなたの回答
tips
プレビュー