README-ja

jQueryは必要ない(You Don't Need jQuery)

フロントエンドの開発環境はめまぐるしく進化していて、最近のブラウザでは十分な質、量のDOM/BOM APIが実装されています。もうDOM操作やイベント処理のためにjQueryを覚える必要はありません。また、ReactやAngularそしてVueなどのフロントエンドライブラリの流行により、DOMを直接操作することはアンチパターンとなりました。jQueryはそれほど重要ではなくなったのです。このプロジェクトは、jQueryでの書き方の代わりとなるネイティブでの書き方(IE10以上)をまとめます。

目次

Translations

セレクタ

classセレクタ、idセレクタ、属性セレクタのような主要セレクタはdocument.querySelectorもしくはdocument.querySelectorAllで代替できます。

jQueryのセレクタと比べて以下の違いがあります。

  • document.querySelectorはセレクタにマッチする最初のエレメントを返す

  • document.querySelectorAllはセレクタにマッチする全てのエレメントのNodeListを返す。Array.prototype.slice.call(document.querySelectorAll(selector) || []);で配列に変換できる。

  • セレクタにマッチする要素がなかった場合、jQueryは[]を返すが、DOM APIはnullを返す。したがってNull Pointer Exceptionに注意する必要がある。もしくはdocument.querySelectorAll(selector) || []のように||を使ってデフォルト値を指定しておく。

注意:document.querySelectordocument.querySelectorAllはかなり遅いです。もし、パフォーマンスが必要ならdocument.getElementByIddocument.getElementsByClassNamedocument.getElementsByTagNameを使ってください。

  • 1.0 セレクタによる選択

  • 1.1 クラス名による選択

  • 1.2 idによる選択

  • 1.3 属性による選択

  • 1.4 子孫要素の選択

  • 1.5 兄弟要素の選択

    • 兄弟要素

    • 直前の兄弟要素

    • 直後の兄弟要素

  • 1.6 祖先要素の選択

    指定要素からdocument方向に遡って走査し、セレクタにマッチする最初の祖先要素を返します。

  • 1.7 Parents Until

    指定要素からセレクタにマッチする祖先要素までdocument方向に遡って走査し、フィルタにマッチする祖先要素を全て取得します。ただし、セレクタで指定された要素は含みません。

  • 1.8 フォーム

    • input/textarea

    • .radio内でのe.currentTargetのインデックスを返す

  • 1.9 iframeのコンテンツ

    $('iframe').contents()はiframeのcontentDocumentを返します。

    • Iframe contents

    • Iframe Query

  • 1.10 bodyを取得する

  • 1.11 属性の設定、取得

    • 属性値を取得する

    • 属性値を設定する

    • data-属性を取得する

⬆ back to top

CSSとスタイル

  • 2.1 CSS

    • スタイルを取得する

    • スタイルを設定する

    • スタイルを一括取得、一括設定する

      複数のスタイルを一括で設定したいなら、oui-dom-utilsのsetStylesarrow-up-right関数を参考にすると良いでしょう。

    • クラスを追加する

    • クラスを削除する

    • クラスの有無をチェックする

    • クラスの有無を切り替える

  • 2.2 横幅と高さ

    横幅(width)と高さ(height)の書き方はほぼ同じなので、高さ(height)の例のみを示します。

    • ウィンドウの高さ

    • ドキュメントの高さ

    • エレメントの高さ

  • 2.3 PositionとOffset

    • Position

      offset parentを起点として、エレメントの座標を取得する。

    • Offset

      documentを起点として、エレメントの座標を取得する。

  • 2.4 スクロール位置

    縦スクロールバーの位置を取得する。

⬆ back to top

DOM操作

  • 3.1 Remove

    DOMからエレメントを削除する。

  • 3.2 Text

    • テキストを取得する

      子孫エレメントも含めた全テキスト内容を取得する。

    • テキストを設定する

      エレメントのコンテントを指定されたテキストに設定する。

  • 3.3 HTML

    • HTMLを取得する

    • HTMLを設定する

  • 3.4 Append

    最後の子要素としてエレメントを追加する。

  • 3.5 Prepend

    最初の子要素としてエレメントを追加する。

  • 3.6 insertBefore

    指定要素の後ろに新しいノードを追加する。

  • 3.7 insertAfter

    指定要素の前に新しいノードを追加する。

  • 3.8 is

    セレクタにマッチするならtrueを返す。

  • 3.9 clone

    エレメントのディープコピーを生成する。

  • 3.10 empty

    全ての子ノードを削除する。

  • 3.11 wrap

    エレメントを指定のHTMLで囲む。

  • 3.12 unwrap

    セレクタにマッチしたエレメントの親要素をDOMから削除する。マッチしたエレメント自体は残す。

  • 3.13 replaceWith

    セレクタにマッチしたエレメントの内容を与えられた内容に置き換える。

⬆ back to top

Ajax

Fetch APIarrow-up-rightはXMLHttpRequestを置き換える新たな規格です。ChromeとFirefoxで動きます。レガシーなブラウザでもpolyfillを使えます。

IE9以上ならgithub/fetcharrow-up-right、IE8以上ならfetch-ie8arrow-up-right、jsonpを利用したいならfetch-jsonparrow-up-rightを試してみてください。

  • 4.1 マッチしたエレメントをサーバから取得したHTMLに置き換える。

⬆ back to top

イベント

名前空間(namespace)と委譲(delegation)を利用した完全な代替手段が必要なら、 https://github.com/oneuijs/oui-dom-eventsarrow-up-right を参照してください。

  • 5.0 ドキュメントが読み込まれたときの動作(DOMContentLoaded)

  • 5.1 イベントをバインドする(on)

  • 5.2 イベントをアンバインドする(off)

  • 5.3 イベントを発火させる(trigger)

⬆ back to top

ユーティリティ関数

殆どのユーティリティ関数はネイティブのAPIで置き換えることができます。表記の一貫性やパフォーマンスを重視した他のライブラリを使う選択肢もあります。lodasharrow-up-rightがおすすめです。

  • 6.1 基本的なユーティリティ関数

    • isArray

    配列かどうか判定する。

    • isWindow

    windowかどうか判定する。

    • inArray

    配列の中で、指定された値が最初に現れたインデックスを返す。(見つからなければ-1を返す)。

    • isNumeric

    数値かどうか判定する。 typeofを使ってください。ライブラリを使う場合、typeofは正確でない場合があります。

    • isFunction

    JavaScript関数オブジェクトかどうか判定する。

    • isEmptyObject

    空のオブジェクトである(列挙できる要素がない)か判定する。

    • isPlainObject

    {}もしくはnew Objectで生成されたオブジェクトであるか判定する。

    • extend

    二つ以上のオブジェクトをマージする。 object.assignはECMAScript6のAPIですが、polyfillarrow-up-rightも利用できます。

    • trim

    前後の空白を除去する。

    • map

    配列やオブジェクトを新しい配列に変換する。

    • each

    配列やオブジェクトに対して繰り返し処理を行う。

    • grep

    フィルター関数に合致したエレメントだけを返す。

    • type

    JavaScript「クラス」名を判定します。

    • merge

    二つの配列をマージする。

    • now

    現在の時刻を返す。

    • proxy

    関数内で実行されるthisを任意のオブジェクトに変更する。

    • makeArray

    配列形式のオブジェクトを配列に変換する。

  • 6.2 contains

    ある要素が他の要素の子孫であるか判定する。

  • 6.3 globaleval

    JavaScriptコードをグローバル空間で実行する。

  • 6.4 parse

    • parseHTML

    文字列をDOM nodeの配列として返します。

    • parseJSON

    JSON文字列をJavaScriptに変換します。

⬆ back to top

Promise

promiseは非同期処理の最終的な処理結果を表します。jQueryにはpromiseを扱うための独自の方法があります。ネイティブのJavaScriptではPromises/A+arrow-up-right規格に則り、薄く、最小限のAPIを実装しています。

  • 7.1 done, fail, always

    doneはpromiseが成功(resolved)したとき、fallは失敗(rejected)したとき、alwaysはどちらの場合も呼び出されます。

  • 7.2 when

    whenは複数のpromiseを扱うときに使います。すべてのpromiseの結果が返ったときに成功となります(失敗が含まれてても成功となります)。

  • 7.3 Deferred

    Deferredはpromiseを作成する方法の一つです。

⬆ back to top

アニメーション

  • 8.1 show、hide

  • 8.2 toggle

    エレメントが表示されていないなら表示し、表示されているなら非表示にします。

  • 8.3 fadeIn、fadeOut

  • 8.4 fadeTo

    エレメントのopacityを調整してください。

  • 8.5 fadeToggle

    フェードイン・フェードアウトを伴ってエレメントの表示・非表示を切り替えます。

  • 8.6 スライドアップ、スライドダウン

  • 8.7 slideToggle

    スライドを伴って、エレメントの表示・非表示を切り替えます。

  • 8.8 animate

    CSSプロパティで定義されたアニメーションを表示します。

選択肢

対応ブラウザ

Chrome

Firefox

IE

Opera

Safari

Latest ✔

Latest ✔

10+ ✔

Latest ✔

6.1+ ✔

ライセンス

MIT

Last updated