SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Yahoo! UI Library Ver.3 を使ってみよう

Yahoo! UI Library3(YUI3)のコア機能(ノード・イベント)

Yahoo! UI Library Ver.3 を使ってみよう(2)

ノード(DOMのサポート)

 DOM(HTMLやXMLの要素部分の操作を行うAPI)のサポートは、モジュールnodeにまとめられています。ターゲットとなる要素はY.one() や、Y.all()を使用してインスタンスを取得します。また直接、e.target.を使用して取得することもできます。要素のインスタンスを取得すると、モジュールnodeのプロパティやメソッドを使用することができるようになります。

要素のインスタンス取得方法

 要素を取得するには以下の方法があります。

(1)Y.one()を使った方法

 引数にはセレクタを指定します。セレクタはCSSで使用される要素の指定方式で、idセレクタ、クラスセレクタ、タイプセレクタなどがあります。

 Y.one()は、引数で指定された、一つの要素のインスタンスを取得します。指定対象の要素が複数ある場合は最初の要素を取得します。

 リスト2は要素を取得して、表示する例題です。

[リスト2]Y.one()で要素の取得(node2.html)
<script type="text/javascript">
window.onload = function() {
    YUI().use('node', function(Y) {
        var node1 = Y.one('#demo3');    //(1)
        alert(node1.get('text'));

        var node2 = Y.one('.demo2');    //(2)
        alert(node2.get('text'));

        var node2 = Y.one('div');    //(3)
        alert(node2.get('text'));

    });
}
</script>
</head>
<body>
    <div>東風</div>
    <div class="demo2">西風</div>
    <div id="demo3">南風</div>
</body>

 (1)はidセレクタを使い、id='demo3'の要素を'#demo3'で指定しています。(2)はクラスセレクタです。class='demo2' を'.demo2'で指定しています。(3)はタイプセレクタを使用しています。divの要素は複数ありますが、表示される要素は最初の要素のみです。

 alertの引数で、取得インスタンスに続けて使用している.get('text')はモジュールnodeのプロパティの取得メソッドです。

(2)Y.all()を使った方法

 引数は(1)と同じくセレクタを指定します。Y.all()の場合指定対象が複数ある場合は、すべての要素を取り込みます。リスト3をみてください。

[リスト3]Y.all()で要素の取得(node3.html)
<script type="text/javascript">
window.onload = function() {
    YUI().use('node', function(Y) {
        var list1 = Y.all('#demo li');        //(1)
        alert(list1.get('text'));        //(2)
        alert(list1.item(2).get('text'));    //(3)

        var list2 = Y.all('#demo');        //(4)
        alert(list2.get('text'));        //(5)
        alert(list2.item(0).get('text'));    //(6)
    });
}
</script>
</head>
<body>
<ul id="demo">
    <li>北海道</li>
    <li>東北</li>
    <li>関東</li>
    <li>関西</li>
</ul>
</body>

 ulとliを使用してリストを表示させました。(1)のセレクタは子孫セレクタで、id=demo内のliタグの要素にマッチングさせ配列として取得しています。例えば、list1.item(2)には'関東'が入ります。

 (4)はidのみ指定しました。list2の配列要素0に<ul>要素が取得されます。

(3)イベントの発生元を取得する方法

 ある要素をクリックし、イベントを発生させ、クリックした文字を表示させるときなど、イベント処理の中でクリックした要素を指すのに、e.targetを使用して取得することができます。リスト4をみてください。イベントの処理の詳しい説明は、次項で行います。

[リスト4]直接要素の取得(node4.html)
<script type="text/javascript">
window.onload = function() {
    YUI().use('node', function(Y) {
        Y.on('click',function(e){        //クリックイベント
            alert(e.target.get('text'));    //(1)
        },'#demo');
    });
}
</script>
</head>
<body>
<ul id=demo>
    <li>北海道</li>
    <li>東北</li>
    <li>関東</li>
    <li>関西</li>
</ul>
</body>

 Y.on()はイベント処理の指定です。(1)でイベント発生時に受け取った要素の文字列を表示しています。

要素を利用する

 要素の取得ができたところで、取得したインスタンスで利用できる、モジュールnode内のメソッド/プロパティについて紹介したいと思います。

(1)メソッド

 メソッドを一覧表で示します。

モジュールnodeのメソッド
メソッド 引数 概要
addClass(className) className < String > (CSS)クラス名を追加
append(content) content < String/Y.Node/HTMLElement > 最後にコンテンツを追加
appendChild(node) node < HTMLElement/Node > 最後にノードを追加
compareTo(refNode) refNode <HTMLElement/Node> 指定ノードと同じものか確認
contains(needle) needle <Node/HTMLElement> ノードに指定ノードが含まれているか
create( html , doc ) html <String>/doc <HTMLDocument> 新しくノードを作成
focus() なし ノードにフォーカスをあてる
get(attr) attr <String> プロパティデータの取得
getXY() なし 位置のXY値を配列で取得
insert(content , where ) content <String/Y.Node/HTMLElement>/where <Int/Y.Node/HTMLElement/String> 指定ノードを指定場所に挿入
indexOf(node) node <Y.Node/DOMNode> 指定ノードを検索
item(index) index <Number> 配列要素番号を設定
prepend(content) content <String/Y.Node/HTMLElement> 最初に挿入
refresh() なし ノードのリフレッシュ
removeClass(className) className <String> (CSS)クラス名を解除
set( attr , val ) attr <String>/val <any> プロパティデータの設定
setcontent(content ) content <String/Y.Node/HTMLElement> 指定の内容に入れ替える
setXY(xy) xy <Array> 位置のXY値を配列で設定

 モジュールnodeは、取得したインスタンスを利用するのに便利なメソッドを数多くサポートしています。

(2)プロパティ

 以下はモジュールnodeのプロパティです。プロパティを扱うにはget()/set()メソッドを使用します。

モジュールnodeのプロパティ
プロパティ 概要
children インスタンスの内容をを配列で返す
docHeight 表示ドキュメントの高さ(スクロールバーが出ているときは、スクロールバーが出ない状態の高さ)
text インスタンスの値を文字列で返す
winHeight 表示ウインドウの高さ(スクロールバーに関係なく表示されているウインドウの高さ)
winWidth 表示ウインドウの幅(スクロールバーに関係なく表示されているウインドウの幅)

 リスト4にモジュールnodeのプロパティの取得と設定を追加しました。

[リスト5]プロパティの取得と設定(node5.html)
<script type="text/javascript">
window.onload = function() {
    YUI().use('node', function(Y) {
        Y.on('click',function(e){
          alert( Y.one('#demo').get('children').get('text'));//(1)
          alert( Y.one('body').get('docHeight'));         //(2)
          alert( Y.one('body').get('winHeight'));        //(3)
          alert( Y.one('body').get('winWidth'));        //(4)
          alert(e.target.get('text'));                //(5)
          e.target.set('text',e.target.get('text')+'です!');//(6)
        },'#demo');
    });
}
</script>
</head>
<body>
<ul id=demo>
    <li>北海道</li>
    <li>東北</li>
    <li>関東</li>
    <li>関西</li>
</ul>
</body>

 (1)children、(2)docHeight、(3)winHeight、(4)winWidth、(5)textのプロパティ取得です。(6)はクリックした要素に'です!'を追加し表示させています。

次のページ
イベント(割り込み処理)

この記事は参考になりましたか?

Yahoo! UI Library Ver.3 を使ってみよう連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 横塚 利津子(ヨコツカ リツコ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4832 2010/02/19 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー