1つのaタグから複数の情報をjQueryで取得する

記事「1つのaタグから複数の情報をjQueryで取得する」。ShitTakaBullのカテゴリー「Javascript」、「jQuery」、「web制作関連」の記事です。不特定多数のaタグに対し、それぞれ複数の情報を持たせたいことがあるかと思います。単数の場合、rel...。

1つのaタグから複数の情報をjQueryで取得する

作成日
2014/01/08
更新日
2014年1月8日

不特定多数のaタグに対し、それぞれ複数の情報を持たせたいことがあるかと思います。単数の場合、relやtitle属性を取得して動作させてきたのですが、動作が複雑になってくると一つのタグに対し色々な情報を持たせたくなります。HTML5では「data-」を使い任意の属性をつけられると見たことがありますが、自分のサイト以外ではまだHTMLに踏み出していない状態です。onclickで処理するのがが一般的なんでしょうか。
複数の情報を持たせることは大分前から探していたのですが、取りあえずできそうなものを見つけたので記します。しかし若干使いづらい気もするので、また何か見つかったら追記していこうと思います。理想は連想配列を渡したいのですが。。。

1)区切り文字を指定し、splitで配列に格納

今回はaタグのrel属性に情報を詰め込み、「:」を区切り文字として情報を取得したいと思います。

2014/09/19 追記:デモページを追加しました。
デモページ

複数の情報をそれぞれ表示

HTML

aタグのrel属性に、2つずつの情報を持たせています。
classがBtのリンクをクリックすると、「好き」「嫌い」の項目に、それぞれの情報を表示できるようにします。

jQuery

attrでrel属性から値を取得した後、splitによって「:」で区切り、変数「BtArr」に配列として格納しています。

グループを作り、任意のタグに対して複数処理を行う

以下の例では、「ターゲット:値」で構成されたグループを「|」で区切り、それぞれのターゲットに対し値を出力できるようにしています。特定のタグに対して処理が行えるため、こちらの方が凡用性が高いと思います。

HTML

jQuery

一度splitでグループごとに配列に格納し、eachでそれぞれを更に区切った上、処理を行っています。

関数を作成し、任意のタグに対して処理を選択

関数を作ることにより、さらに汎用性が広がるのではないでしょうか。全項目のグループを作ってもいいかと思います。
以下の例では、「ターゲット:処理:値」を受け取り、「TxtChg」という関数を実行しています。

HTML

jQuery

関数に「rewrite」、「add」、「remove」の内どれかを渡せるようにし、任意のタグに対して処理を選択できるようにしています。

利点と問題点

HTMLが汚くなる感じですが、HTMLで指定できるとタグごとの設定が出来るので、ページの他にjsファイルやhead部分を編集しなくてもいいのかなと思います。特にWordpressなどでページを作成する場合、ページごとにJavascriptを設定するのは面倒くさい気がするので。
このsplitを利用した場合だと順番は固定されるので、項目を増やしたり減らしたりする時は更新が大変そうですね。

Category

Archive