Kinopyo Blog

プログラマとしてRuby, Rails, iPhone, iPad,Macなどなどと向き合う日々のログポース

Posts Tagged ‘jQuery’

jQuery IDに括弧がついたオブジェクトを取るには

2010年03月03日

こんなHTMLがあるとします。

idに[]が付いてますね。

<input id="foo[0]" type="text" />
<input id="foo[1]" type="text" />
<input id="foo[2]" type="text" />

こういうIDに括弧が付いたモノに対して

普通の#付きのjQueryセレクタでは選択できません。

$("#foo[0]");    // 取れません

属性フィルタ[attribute=value]でとるのが正解です。

$("[id='foo[0]']");

0311更新:

もし具体的なタグがわかってあれば、

それを指定することでパフォーマンスを向上できます。

上記の例で言うと

$("input[id='foo[0]']");

このほうが速いです。

jQuery $.inArray()関数の戻り値に注意を

2010年01月15日

$.inArray(value, array)

指定した値が配列中にあれば、そのインデックスを返します。

配列に存在しなければ戻り値は”-1″になりますので注意してください。


var array = ["a", "b", "c"];

if ($.inArray("d", array) == -1) {

    // d is not in array

}

下記のコードは間違いですよ。。。

if ($.inArray("d", array)) {}

$.isArray(obj)

パラメータで渡された値が配列であるかどうかを判別します。

戻り値はtrueかfalseです。

jQueryで右クリックを無効にする方法

2010年01月07日

jQueryでマウス右クリックを無効にする方法です。

“contextmenu”のイベントはjQueryのドキュメントには乗ってませんが、

それのハンドラでreturn falseすることで簡単に実現できます。


$("document").bind("contextmenu", function(){

    return false;

});

jQuery APIを一枚の紙にまとめたノート。他にもHTML、CSS、JavaScriptノートが満載

2009年12月27日

jQueryのAPIを一枚の紙にまとめたものです。

ノートはPDFファイルで、ダウンロードすることができます。

jQuery APIノート

jQuery-api-note


作者はMattさんです。ありがとうございました。


他にもHTML、CSS、JavaScript、PHP、Mac、Windows、Photoshop、Browserなどのノートが満載です。

HTML, CSS, PHP, Javascript And More Cheat Sheets

興味のある方は直接作者のサイトを参照してください。

jQuery each()関数内にcontinue/breakを使いたい時は

2009年12月22日

jQueryのeach()は関数のためcontinueやbreakなどのループ制御文は使えません。

グーグル先生に聞いたら代わりの方法が見つかりました。

  • break : return false
  • continue : return true

参考サイト:

jQuery の each() の continue / break は・・・

jQueryでiFrame内のXML Documentを指定する方法

iframeでXMLを読み込んた場合、XMLのdocumentを正しく指定すれば

普通のDOM操作のようにXMLに対して操作できます。

FirefoxとIEの取り方が異なるため、その方法を紹介します。


サンプル

こんなXMLファイルの中の各name要素のテキストを取るとします。






    World of Warcraft

    Warcraft III

    StarCraft

    Final Fantasy


IEの場合XMLDocument


$("iframe").attr("src",xmlUrl).one("load", function(){

    var xmlDocument = this.contentWindow.document.XMLDocument;

    $(xmlDocument).find("game").each(function(){

        var game = $(this).text();

       // ほかの処理

    });

});

Firefoxの場合ActiveElement


$("iframe").attr("src",xmlUrl).one("load", function(){

    var xmlDocument = this.contentWindow.document.ActiveElement;

    $(xmlDocument).find("game").each(function(){

        var game = $(this).text();

       // ほかの処理

    });

});

xmlUrlは実際XMLファイルのURLです。

参考サイト

下記の英語掲示板で見つけたんです。

How to Get XML Document from iFrame

jQuery #idでは一つし要素か選択できない、同じIDを持つ複数要素を選択するには

2009年12月20日

そもそもIDというのは一つのページ内でユニークなはずですが、

何らかの理由で同じIDを持つ形になったとしましょう。

その場合普通のjQueryの#idセレクタでは一つの要素(順番的に最初に合致した要素)しか選択できません。

そこで[id=xx]の形で属性フィルタで全ての選択することができます。

以下サンプルコードです。


$("#foo").css("background-color","gray");

$("[id=bar]").css("background-color","green");



use #id selector






use attribute selector [id=xx]




jQuerySelectorByID

FirefoxでjQueryを開発するならFireQueryを使ってみよう

2009年12月13日

FireQueryはFirebugを拡張したアドオンで、jQueryをよりよくサポートできるんです。

jQueryのオブジェクトをコンソールで確認したり、マウスオーバーで画面上のレーヤーで表示されたりして

大変便利になります。

これ以外でもjQuerifyというやつがあって、

jQueryが適用されてないhtmlにもfirebugのコンソールで直接jQueryのコードを書いてそのまま動作確認ができます。

主な機能

  • jQuery expressions are intelligently presented in Firebug Console and DOM inspector
  • attached jQuery data are first class citizens
  • elements in jQuery collections are highlighted on hover
  • jQuerify: enables you to inject jQuery into any page

FireQuery

FireQuery2

jQuerifyを使おう!

  • まずfirebugのconsoleのjQuerifyをクリックします。するとjqueryが適用されたと表示されます。

jquerify

  • 次は「>>>」のところでjquery文を書けばOKです。

fireQuery

  • 複数行のjqueryコードが書きたい場合は、右下にある「↑」ボタンをクリックし、コンソールの右フレームで書けます。

jquery-runed

ダウンロード

FireQuery Download

jQueryの$(expr, context)、今まで気づいてなかったcontextパラメータ

2009年12月10日

今まで平気に$(expression)を使ってきましたが、

この二番目のcontextパラメータでセレクタの範囲を決まることができます。


この関数はjQueryのコア関数で幅広く使われ、

もっとも一般的な使い方はcontextを省略したものでしょう。


$("div")

contextパラメータ

contextが何も指定されなければ、$()関数は現在のHTMLのDOMエレメントを検索する。

逆にDOMエレメントやjQueryオブジェクトなどのcontextが指定されれば、expressionはそのcontextに対して合致するものを捜します。

簡単にいうとfind()関数と似ています。

実践でいうと以下の二つは同じ機能をしています。


$("body").find("div");

$("div,body");

参考サイト

jQuery(expression, context) – jQuery 1.3.2 日本語リファレンス

jQuery liveにデータを渡すのは1.3.3で実現

今のlive関数は二番目の引数にデータを渡すことができません。

bindとliveのシグネチャーは以下になります。


bind(type, [data], fn)

live(type, fn)

いざ使おうと思って単純にbindをliveに変換したところアプリは動かなくなっちゃいました。

回避方法はいろいろありますが、以下の記事によりますと

jQuery 1.3.3ではliveにもdataを渡すことができるそうです。

作者はjQueryのコアコントリビュートだそうです。

jQuery Edge: Live Events now with Data