jQueryを総復習！！久々にやったら全部忘れていた、、、

jQueryを使うためには、
HTML/CSS/Javascriptの知識がある程度必要です。
テキストエディタとブラウザがあれば練習できます！！！


#jQueryを使用する

このコードをHTMLに埋め込めば、jQueryが使えるようになります。
このコードはbodyの閉じタグの直前に書くことが多いそうです。
scriptを書く場合は、コードを読み込んだ行よりも後の行で書きましょう。

```jQuery
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
```


#セレクタとメソッド
セレクタは処理の対象
メソッドは処理の方法

例えば、「div要素の文字をオレンジ色にする」場合、「div要素がセレクタ」で、「文字をオレンジ色にするがメソッド」です・。

#基本的な書き方
「div要素の文字をオレンジ色にする」場合

```jQuery
<script>
$(function(){
  $('div').css('color', 'orange');
})
 </script>
```

メソッドは続けて書くこともできます。繋げて書くことを「メソッドチェーン」と言います。

```jQuery
<script>
$(function(){
  $('div').css('color', 'orange').hide('slow');
})
 </script>
```

セレクタがid要素の場合、$('#id要素名')
セレクタがクラスの場合、$('.クラス名')

id要素の中の直下のクラスだけ指定したい場合は、$('id要素名 > .クラス名') 

複数要素を指定したい場合(pとh1など)は、$('p, h1')
隣接する要素を指定したい場合、$(#id名 + #隣接する要素のid名)　。。。もちろんid以外にも使えます。


#フィルタ
子要素がたくさんある場合、子要素のうちのどれをセレクタに設定するかを選べます。

直下の子要素の場合、さっきも言ったように、 「>」この記号を使います。

例えば、下のようなhtmlがあるとします。

```html
<ul id="aaa">
   <li>1</li>
   <li>2</li>
   <li>3</li>
   <li>4</li>
   <li>5</li>
 </ul>
```

子要素の4番目をを指定したい場合は、以下のように書くことができます
4の部分を2に変えたら、2番目になりますし、3に変えたら3番目になります。
eqは「equal」の略です。
```jQuery
$('#aaa' > li:eq(4)).css('color', 'orange');
```

○番目以降のリスト全部を指定したい場合は、gt(greater than)を使いますし、
○番目以前のリスト全部を指定したい場合は、lt(less than)を使います。

```jQuery
//$('#aaa' > li:gt(4)).css('color', 'orange');
//$('#aaa' > li:lt(2)).css('color', 'orange');
```

evenとoddを使えば、偶数や奇数を指定できます。
even...偶数
odd...奇数

```jQuery
//$('#aaa' > li:even).css('color', 'orange');
//$('#aaa' > li:odd).css('color', 'orange');
```

containsを使うと、リスト要素の中身で検索をかけて、それに合致するものをセレクタとすることができます。

```jQuery
$('#aaa' > li:contains(3)).css('color', 'orange');
```

#DOM要素指定
ある要素の親要素を指定したい場合はparentを使います。
逆に子要素を指定したい場合は、childrenを使います。

```jQuery
//$('#aaa').parent().css('color', 'orange')
//$('#aaa').children().css('color', 'orange')
```

ある要素の次にある要素を指定したい場合はnext
ある要素の前にある要素を指定したい場合はpreviousを使います。

```jQuery
//$('#aaa' > li:eq(3)).next().css('color', 'orange'); //4
//$('#aaa' > li:eq(3)).previous().css('color', 'orange'); //2
```

#属性セレクタ
ここで一旦、先ほどのhtmlは忘れてください。
a要素のリンクなどを扱って行きます。

a要素のhref属性が...

完全一致の場合は「=(イコール)」
完全一致の否定(完全一致の文字列ではない)場合、「!=」
「〜〜」という文字列が含まれるものの場合は「*=」
先頭が〜〜で始まる場合は「^=」
終わりが〜〜で終わる場合は「$=」

具体例で見て行きましょう！！

```jQuery
$('a[href="https://qiita.com/trend"]').css('color', 'orange'); //完全一致
$('a[href!="https://qiita.com/trend"]').css('color', 'orange'); //完全一致の否定
$('a[href*="qiita"]').css('color', 'orange'); //Qiitaを含むもの
$('a[href^="http]').css('color', 'orange'); //httpから始まるもの
$('a[href$=".com"]').css('color', 'orange'); //.comで終わるもの
```

#メソッドで値の取得や変更

例えば、これ。
値を書かなければ現在のp要素の色を知ることができます。
コンソールに表示すれば、何色なのかがわかります。

```jQuery
$('p').css('color');
```

addClass removeClassでcssを追加したり削除したりできる。

```html

<style>
css{
   font-size:20px;
   color:orange;
   border:solid;
}
</style>

<script>
  $('p').addClass('css');
</script>
```

attr(attribute属性)は、HTMLの属性を取得・変更するメソッド

```jQuery
$('a').attr('href'); //hrefの中身を取得
$('a').attr('href', 'https://qiita.com/trend'); //hrefの中身を変更
```

dataメソッドは、独自の属性を取得・変更できる
HTML5のdataメソッドを理解しておかないとわからない

```HTML5
.
.
.
<a href="https://qiita.com/trend" data-sitename="Qiita">Qiita</a>
.
.
.

$('a').data('sitename'); //data-sitenameの中身を取得
```


P要素の中身を取得したり、書き換えたい場合に「text」が使える

```html
.
.
.
<p>こんにちは</p>
.
.
.
$('p').text();
$('p').text('こんばんは');
```

中身の取得・変更をし、さらにHTMLのタグを有効にしたい場合、(リンクをつけるとか)


```html
.
.
.
<p>こんにちは</p>
.
.
.
$('p').html('<a href="https://qiita.com/trend">Qiita</a>');
```

ボタン系は、表示されるテキストが「value属性」に記されているのでテキストを変えたい場合は、value属性を取得・変更する必要がある。

```html
.
.
.
<input type="text" value="戻る">
.
.
.
$('input').val(); value属性を取得
$('input').val('送信'); value属性を書き換え
```

例えば、p要素の中身を消したい場合はemptyが使え、p要素を消したい場合はremoveが使えます。

```html
.
.
.
<p>こんにちは</p>
.
.
.
$('p').empty();
$('p').remove();
```

#要素を追加する

例えば、このようなhtmlがあるとする

```html
<ul id="aaa">
   <li>1</li>
   <li>2</li>
   <li>3</li>
   <li>4</li>
   <li>5</li>
 </ul>
```

新たにリストを作りたい場合、

```jQuery
var newli = $('<li>').text(new list);
$('ul > li:eq(3)').before(li) //3の直前にnewliを追加
```

beforeは直前に挿入しますが、afterにすると直後に挿入してくれます。
また、prependは子要素の先頭に追加し、appendは子要素の最後に追加します。

```jQuery
var newli = $('<li>').text(new list);
//$('ul').prepend(li); //1の前に追加される
//$('ul').append(li); //5の後に追加される
```

#エフェクトを使用する
p要素のエフェクトをかけたいと思います。
hideはパッと消える(slowをつけることでゆっくり消える、時間を指定することもできる)

```html
.
.
.
<p id="test">test</p>
.
.
.
$('test').hide() //パッと消える
$('test').hide(slow) //ゆっくり消える
$('test').hide(500) //0.5秒で消える
```

フェードインやフェードアウトもできる

```html
.
.
.
<p id="test">test</p>
.
.
.
$('test').fadeIn(500) //0.5秒でフェードイン
$('test').fadeOut() //0.5秒でフェードアウト　　引数は一緒
```

toggleは、今表示されていれば消す、表示されていなければ表示するというもの

```html
.
.
.
<p id="test">test</p>
.
.
.
$('test').toggle(500) //0.5秒で消える
$('test').toggle(500) //0.5秒で出現する
```

これらのhideやフェードイン、フェードアウト、toggleには、第二引数として関数をつけることができる。
これは、0.5秒で消えた後に、alertが発動されます。

```jQuery
$('test').hide(500, function(){
    alert('gone!');
})
```

#イベント

```html
.
.
.
<p id="test">test</p>
.
.
.
$('test').click(function(){
   alert("This is test");
}) //testをクリックしたら、alertが発動
```

testにマウスがかぶさったら、イベントを発生するようにするには、mouseoverを使います。

```html
.
.
.
<p id="test">test</p>
.
.
.
$('test').mouseover(function(){
   $(this).css('background', 'blue');
}) //testの上にマウスが乗ったら、testの背景が青になる
```

上の場合、マウスが離れても背景色は戻らないので、mouseoutイベントを発生させる必要があります。


```html
.
.
.
<p id="test">test</p>
.
.
.
$('test')
　　　　　　.mouseover(function(){
   　　　　　$(this).css('background', 'blue');
}) //testの上にマウスが乗ったら、testの背景が青になる
　　　　　 .mouseout(function(){
     $(this).css('background', 'orange');
})//マウスが離れたら背景色がオレンジにもどる
```

フォームに関するイベントを見て行きましょう！！
focusが当たっときにイベントを発生させるのはfocus
focusが外れたときにイベント発生させるのは、blur

```jQuery
.
.
.
<input type="text" id="name">

$('test')
　　　　.focus(function(){
   $(this).css('background', 'blue');
}) //testにフォーカスが当たったら、testの背景が青になる
　　　.blur(function(){
   $(this).css('background', 'orange');
}) //testからフォーカスが外れたら、testの背景がオレンジになる
```

#終わり
とりあえず、これで終わります。
結構シンプルに書きすぎたかもしれないですね。