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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

2437閲覧

【jquery】last-child/nth-lastで最後の1要素のみを取得するには?

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2015/06/09 17:55

プログラミング歴2ヶ月の初心者です。宜しくお願いします。

###前提・実現したいこと
複数人で同時使用できるチャットアプリを作っています。
デザインは概ねLINEを模しています。

同じ人間が「連続して」発言した場合、2度目以降の発言にはプロフィールアイコンをつけないようにしたいです。
*LINEと違う部分として自身の発言時にもアイコンが出るようにしています。

###発生している問題・エラーメッセージ
発言の表示はappendを使い<li><span>などを挿入しています。
自分の発言にはclass名my~、他人の発言にはclass名yr~がつきます。

last/last-child/nth-last-child()とhasClass/addClassを使い、最後の発言者が自分の場合(=最後の要素のクラス名がmy~の場合)、次の発言に.opacityをつけたいのですが、今までの発言全てに.opacityがかかってしまいます。
どう指定すればよいでしょうか。

###ソースコード
発言を表示するコード

lang

1 $("#board").append('<li class="mylist">' + 2 '<span class="myname">' + '<img class="icon" src="'+icon+'">' + 3 '<span class="mydate"><span class="txt">' +text.input_date+ '</span></span></span>' + 4 '<span class="mymsg">' +text.message+ '</span></li>')

質問のところ

if($('li:last').hasClass('mylist')){ $('li:nth-last-child(1)').addClass('opacity'); }

###補足情報(言語/FW/ツール等のバージョンなど)
宜しくお願い致します。
html css javascript jquery brackets milkcocoa chat

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

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

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

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

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

guest

回答2

0

ベストアンサー

直接の回答ではないですが、次のように隣接要素セレクタを使って非表示にするとかはどうでしょうか

lang

1<style> 2li { 3 list-style: none; 4} 5.mylist + .mylist .icon { 6 visibility: hidden; 7} 8.yrlist + .yrlist .icon { 9 visibility: hidden; 10} 11.txt { 12 font-style: italic; 13} 14.txt:after { 15 content: ":" 16} 17.icon { 18 width: 32px; 19} 20</style> 21<ul> 22 <li class="mylist"> 23 <span class="myname"> 24 <img class="icon" src="https://cdn.teratail.com/uploads/avatars/2211/c3RuZJQP_thumbnail.png?1424846645"> 25 <span class="mydate"> 26 <span class="txt">10:00</span> 27 </span> 28 </span> 29 <span class="mymsg">今何してますか?</span> 30 </li> 31 <li class="mylist"> 32 <span class="myname"> 33 <img class="icon" src="https://cdn.teratail.com/uploads/avatars/2211/c3RuZJQP_thumbnail.png?1424846645"> 34 <span class="mydate"> 35 <span class="txt">10:10</span> 36 </span> 37 </span> 38 <span class="mymsg">忙しいですか?</span> 39 </li> 40 <li class="yrlist"> 41 <span class="yrname"> 42 <img class="icon" src="https://cdn.teratail.com/uploads/avatars/21072/645aa4e8adf90b26_thumbnail.jpg?1433398810"> 43 <span class="yrdate"> 44 <span class="txt">10:20</span> 45 </span> 46 </span> 47 <span class="yrmsg">忙しいです</span> 48 </li> 49 <li class="yrlist"> 50 <span class="yrname"> 51 <img class="icon" src="https://cdn.teratail.com/uploads/avatars/21072/645aa4e8adf90b26_thumbnail.jpg?1433398810"> 52 <span class="yrdate"> 53 <span class="txt">10:30</span> 54 </span> 55 </span> 56 <span class="yrmsg">めちゃ忙しいです</span> 57 </li> 58 <li class="mylist"> 59 <span class="myname"> 60 <img class="icon" src="https://cdn.teratail.com/uploads/avatars/2211/c3RuZJQP_thumbnail.png?1424846645"> 61 <span class="mydate"> 62 <span class="txt">10:40</span> 63 </span> 64 </span> 65 <span class="mymsg">手伝ってもらってもいいですか?</span> 66 </li> 67 <li class="mylist"> 68 <span class="myname"> 69 <img class="icon" src="https://cdn.teratail.com/uploads/avatars/2211/c3RuZJQP_thumbnail.png?1424846645"> 70 <span class="mydate"> 71 <span class="txt">10:50</span> 72 </span> 73 </span> 74 <span class="mymsg">近くのコンビニエンスストアで~~</span> 75 </li> 76</ul>

投稿2015/06/10 01:03

ngyuki

総合スコア4514

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

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

退会済みユーザー

退会済みユーザー

2015/06/10 02:11

解決しました!ありがとうございました!! cssで.mylist + .mylistという書き方ができるのですね。勉強になりました。 簡単すぎて驚きました。
guest

0

隣接する次の要素をひとつだけ取得したい時はnextメソッドで取得出来ます。
これを利用して次の様にすると意図した要素にクラスが追加されます。

lang

1$(function(){ 2 3 // 一番最初の発言にクラス'opacity'を追加 4 $('#board').children('.mylist, .yrlist').first().addClass('opacity'); 5 6 // 次の発言者が異なったらその要素にクラス'opacity'を追加 7 $('.yrlist').next('.mylist').addClass('opacity'); 8 $('.mylist').next('.yrlist').addClass('opacity'); 9 10});

投稿2015/06/09 21:53

編集2015/06/09 22:03
flat

総合スコア617

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

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

退会済みユーザー

退会済みユーザー

2015/06/10 02:15

解決しました!ありがとうございました!! 自分の発言が続いた時なので $('.mylist').next('.mylist').addClass('opacity'); の1行でいけました。わかってしまえば、簡単なんですね。 勉強になりました、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問