質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

9059閲覧

javascriptでブラウザの違いで動作が変わる

aaaaaaaaaaaaaa

総合スコア77

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Internet Explorer

Internet Explorer(IE;MSIE)はマイクロソフトが開発したウェブブラウザです。Microsoft Windowsに組み込まれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/06/16 15:32

Internet Explorerではこちらが思っている動作を行うのですがChromeでは意図した動きをしてくれません。
ドロップダウンの項目を並び替えをJavaSrcitptで行っているのですがhtml内のoptionでselectedを指定してドロップダウンの項目を選択状態にしているのですがChromeでドロップダウン内を以下のJavaScriptでソートした際
selectedが効かなくなります。
解決策わかる方教えていただけませんか。

$(function(){ // 昇順にソートする関数 var item = $("#sortThis").children().sort(function(a,b){ //textでソート var sortA= a.text; var sortB = b.text; if (sortA > sortB) { return 1; } else if (sortA < sortB) { return -1; } else { return 0; } }); $("#sortThis").append(item); });

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2016/06/16 16:39

HTMLを質問文に追記いただけませんか?
guest

回答3

0

chromeで確認しました。
入れ替えによって、selected はあるのに、ブラウザ上で選択されてる要素がほかのものになってしまいますね。
ソート後に

javascript

1$("#sortThis").children("[selected]").prop("selected",true);

で、selectedがついた要素が選択状態に戻ります。

投稿2016/06/17 00:21

編集2016/06/17 06:27
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

今、コードを書ける状況にないのでヒントだけ。
ソート処理は出来てるそうなので、問題はソート後に選択される項目が保持されないことですね。
selectedIndexが要素入れ替え時に動的に変更されないとすれば、ソート前に要素の選択内容を保存しておき、ソート後に選択し直せば良いと思います。

JavaScript

1var value = select.value; 2 3// ソート処理 4 5select.value = value;

Re: aaaaaaaaaaaaaa さん

投稿2016/06/16 23:46

think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

html

1<select id="test"> 2 <option value="Y">123</option> 3 <option value="s">def</option> 4 <option value="!">ghi</option> 5 <option value="e">abc</option> 6</select>

javascript

1(function($) { 2 $(function() { 3 var options = $("#test option"); 4 var selected = $("option[selected]").val(); 5 /*selectされているのをチェック。 6 チェックが複数ある場合は、また別の方法で...というか普通はひとつですよね?*/ 7 8 options.attr("selected",false); /*ここでselect解除*/ 9 10 var arr = options.map(function(i, o) { 11 return { 12 t: $(o).text(), 13 v: o.value 14 }; 15 }).get(); 16 arr.sort(function(o1, o2) { 17 return o1.t > o2.t ? 1 : o1.t < o2.t ? -1 : 0; 18 }); 19 options.each(function(i, o) { 20 o.value = arr[i].v; 21 $(o).text(arr[i].t); 22 $(this).parent("select").val(selected); /*最初に選んでおいたセレクトを適用*/ 23 }); 24 25 }); 26})(jQuery);

まずmapでoptionのオブジェクトを作って、そこにoptionのテキストとvalueを仕込みます。

var arr = options.map(function(i, o) { return { t: $(o).text(), v: o.value }; }).get();

get()にはindexが入ります。

[ { t: 123, v: Y}, { t: def, v: s} .... ] こういう感じです。

で、arr.sort()でこれらのテキストを比較し、eachで配置します。

eachのoにはoptionタグのvalueが入ってます。

<option value="Y"> <option value="s"> <option value="!"> <option value="e">

こんな感じです。arr.sort()で並び替えたvalueをoptionタグのvalueに書き換えて、optionタグのtextを書き換えて完成です。

完成すると、optionのvalueの値が、

html

1<select id="test"> 2 <option value="Y">123</option> 3 <option value="e">abc</option> 4 <option value="s">def</option> 5 <option value="!">ghi</option> 6</select>

こんな感じに「Yes!」となるようにしてみました。

ソートし終わったhtmlにはselectedが表示されていませんが、プロパティの方で入ってますので、まぁなんとか強引に形に持っていくと言う感じで。

###別の方法で最初のjavascriptソースを利用して

javascript

1(function($) { 2 $(function() { 3 var options = $("#test option"); 4 var arr = options.map(function(i, o) { 5 return { 6 text: $(o).text(), 7 val: o.value, 8 sel: o.selected //true || false 9 }; 10 }).get(); 11 12 arr.sort(function(o1, o2) { 13 return o1.text > o2.text ? 1 : o1.text < o2.text ? -1 : 0; 14 }); 15 options.each(function(i, o) { 16 o.value = arr[i].val; 17 $(o).text(arr[i].text); 18 o.selected = arr[i].sel; 19 if (o.selected) { 20 $(o).attr("selected",true); 21 } else { 22 $(o).attr("selected",false); 23 } 24 }); 25 26 }); 27})(jQuery);

まぁ、ひとまずって感じですけれども。

投稿2016/06/16 17:03

編集2016/06/16 19:05
hidekichi

総合スコア366

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hidekichi

2016/06/16 18:00 編集

そこらは、質問にもなかったので想定してませんでしたが、予め調べといて後でそこに付け加えるというので良いのでは? var selected = $("option[selected]").val(); で調べておき、 ----追記 options.attr("selected",false); で消しておく(これ忘れてた) ---- options.eachの中で、 $(this).parent("select").val(selected) とか。 しかし、sortするわけですから、selectedが予め入っているかどうかはわかりませんけど、できたら入ってないのでやって欲しいですね(笑)
kei344

2016/06/16 18:36

> selectedを指定してドロップダウンの項目を選択状態にしているのですが 質問文に入っているので・・・。
hidekichi

2016/06/16 18:43

あ、本当ですね。 色々やりながら読んでたのでソートの方に気が行ってスクリプト書いてる内にその事忘れてました。 一つ前のコメントの分で、selectされている状態で表示はできるんですけれども、タグの中にはselectは入ってない状態になります。プロパティの方に入っている感じですね。 ソースに追記はしておきます。
hidekichi

2016/06/16 19:07

別バージョンのソースを追記しました。 これだったらhtmlのソースにもselectedが出るのではなかろうかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問