ウェブDeBLOG | トライデントコンピュータ専門学校 Webデザイン学科

トライデントWebデザイン学科の最新情報を紹介しています。学生へのインタビュー記事から学生作品の解説、Webデザイン・マークアップ・プログラミングの授業風景、プロジェクト発表会、名古屋のWeb制作会社情報、イベント参加レポートやWeb制作の技術解説記事などWeb制作に関連する記事を掲載しています。トライデントコンピュータ専門学校は、いま話題の名古屋駅から地下街を歩いて3分です。 

2017.01.23 [月] NodeList と HTMLCollection と Node.appendChild() と

JavaScriptを書いていると、Chrome Developer Toolsのコンソールに「Nodeが…」なんてエラーを、たびたび戴きます。

Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.
「appendChild使うときは、Nodeじゃないとダメだよ」

その都度、Googleで調べたり書き直したりして対処していたのですが、すぐに忘れてしまうので備忘録として書いておきます。

javascript20170118-001.jpg

目次

  1. Nodeとは
  2. HTMLCollectionとは
  3. appendChildとは
  4. 動的と静的の違い

Nodeとは

Node(ノード)

NodeとはHTMLの中にあるすべてをNode(節-ふし)という単位で区切ったインターフェースのことを言います。
HTMLの要素はもちろん、テキストや属性、コメントにいたるすべてがNodeになります。
Nodeの種類には、12種類あり、主なものは下の表の太字「Document(ドキュメント)」「Element(要素)」「Attr(属性)」「Comment(コメント)」「Text(テキスト)」などです。

インターフェース解説定数タイプ
Elementエレメント、要素。HTMLタグを表します。ELEMENT_NODE1
Attrアトリビュート、属性。HTMLタグ内の属性。ATTRIBUTE_NODE2
Textテキストノード、タグ以外の文字データや、空白・タブ・改行(=ホワイトスペースノード)。TEXT_NODE3
CDATASectionCDATA セクションCDATA_SECTION_NODE4
EntityReferenceエンティティリファレンスENTITY_REFERENCE_NODE5
EntityエンティティENTITY_NODE6
ProcessingInstruction処理命令PROCESSING_INSTRUCTION_NODE7
Comment<!--から-->で囲まれたコメントCOMMENT_NODE8
DocumentHTML文書全体を表します。JavaScriptでは、documentオブジェクト。DOCUMENT_NODE9
DocumentTypeドキュメントタイプDOCUMENT_TYPE_NODE10
DocumentFragmentドキュメントフラグメントDOCUMENT_FRAGMENT_NODE11
NotationノーテーションNOTATION_NODE12

下記のようなHTMLをDOMツリーとノードで表すと

<!DOCTYPE html>
<html>
<head>

HTML5
<link href="style.css" rel="stylesheet" />
</head>
<body>

DOMとは

DOMとはDocument Objact Modelの略です。

</body> </html>
domtree2017.jpg

となります。
参考:DOMの基本を学ぼう(1):正しいHTMLとドキュメントツリーを理解しよう (1/3) - @IT

NodeList

NodeListオブジェクトは、この縦のノードを配列っぽく並べたものです。
DOMツリーを表したHTMLでbody内のNodeListは、childNodesで取得することができます。
配列っぽくというのは、インデックスで取得できたりして配列っぽく振舞いますが、実際には配列ではありませんので、配列で使える便利なメソッドは利用できません。

var nodelist = document.querySelectorAll('body');
console.log(nodelist[0].childNodes);
NodeList[5]
0:text
1:h1
2:text
3:p#explanation
4:text

個別で取得したい場合は、childNodesをインデックスでつなげて指定することができます。
また、item()でも取得できます。

console.log(nodelist[0].childNodes[1]);
console.log(nodelist[0].childNodes[3]);
console.log(nodelist[0].childNodes[3].childNodes[0]);
console.log(nodelist[0].childNodes[3].childNodes.item(1));
<h1>DOMとは</h1>
<p id="explanation">…</p>
<abbr title="Document Objact Model">DOM</abbr>
"とは"

HTMLCollectionとは

HTMLCollection

HTMLCollectionをMozilla Developer NetworkW3Cのドキュメントで調べてみました。

HTMLCollection は要素群(document 内の順序)の一般的な集合(配列)を表現したインターフェイスで,リストから選択するためのメソッドとプロパティを提供します.

Note: This interface is called HTMLCollection for historical reasons (before DOM4, collections implementing this interface could only have HTML elements as their items).
注意: このインターフェースは歴史的な経緯からHTMLCollectionと呼ばれています。 (DOM4以前は、このインターフェースが実装されたコレクションは、その項目としてHTML要素のみを持つことができました。)

HTML DOM内のHTMLCollection は生きて(live)います; それらは元になったdocumentが変更された時点で自動的に更新されます.

HTMLCollection - Web API インターフェイス | MDN

An HTMLCollection is a list of nodes. An individual node may be accessed by either ordinal index or the node's name or id attributes.
HTMLCollectionはノードのリストです。個々のノードは、序数インデックスまたはノードの名前またはID属性のいずれかによってアクセスできます。

Note: Collections in the HTML DOM are assumed to be live meaning that they are automatically updated when the underlying document is changed.
注:HTML DOM内のコレクションは、基本となるドキュメントが変更されたときに自動的に更新されることを意味するライブと見なされます。

Document Object Model HTML

難しく書いてあるのですが、HTMLCollectionオブジェクトは動的に更新されるNodeListの一種です。
HTMLCollectionで取得することができるメソッドは、下記が代表的です。

  • document.anchors
  • document.forms
  • document.images
  • document.links
  • document.getElementsByClassName()
  • document.getElementsByTagName()
  • node.children

実際にNodeListを取得するquerySelectorAll()とHTMLCollectonを取得するgetElementsByClassName()、さらにjQueryでも取得してみます。

  • リスト1
  • リスト2
  • リスト3
var nodelist = document.querySelectorAll('.list');
var collection = document.getElementsByClassName('list');
var $node = $('.list');
console.log(nodelist);
console.log(collection);
console.log($node);
NodeList[3]
0:li#list1.list
1:li#list2.list
2:li#list3.list
HTMLCollection[3]
0:li#list1.list
1:li#list2.list
2:li#list3.list
r.fn.init[3]
0:li#list1.list
1:li#list2.list
2:li#list3.list

各オブジェクトがconsoleに表示されました。

appendChildとは

Node.appendChild() メソッド

Node.appendChild() メソッドは、特定の親ノードの子ノードリストの末尾にノードを追加します。追加しようとしたノードが既に存在していたら、それは現在の親ノードから除かれ、新しい親ノードに追加されます(他のノードに追加する前にそのノードを親ノードから削除する必要はありません)。

Node.appendChild - Web API インターフェイス | MDN

この「親ノードの子ノードリストの末尾にノードを追加します。」のノードがわかっていないと最初に明記したエラーなどが表示されてしまいます。

jQueryでは、appendメソッドで文字列を追加することもできるので、リスト3の下に「リスト4」を追加したい場合、jQueryで書くと<li>リスト4</li>をそのまま引数に書きます。
classやidも必要であれば、一緒に記入します。

$('ul').append('
  • リスト4
  • ')
    • リスト1
    • リスト2
    • リスト3
    • リスト4
    •  //加わりました。

    と、簡単に追加できるのですが、ピュアなJavaScriotのappendChild()で同じようにすると

    var elm = document.getElementsByTagName('ul');
    elm.appendChild('
  • リスト5
  • ');

    エラーを戴いちゃいます。appendと名称が似ているので、同じ動きを期待しちゃいますよね。

    Uncaught TypeError: elm.appendChild is not a function

    原因は、「親ノードの子ノードリストの末尾にノードを追加します。」のノードがノードじゃないからです。
    親ノードは配列っぽくなっていますので、elm[0]とインデックスを加えます。

    elm[0].appendChild('
  • リスト5
  • ');

    でも、まだエラーがでます。

    Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.

    加える値もノードでないといけません。

    var elm = document.getElementsByTagName('ul');
    var newelm = document.createElement('li');
    newelm.classList.add('list');
    newelm.setAttribute('id', 'list5');
    newelm.innerHTML = 'リスト5';
    elm[0].appendChild(newelm);
    

    createElement('li')で新しくli要素ノードを作り、classとidを設定してinnerHTMLでテキストを加えます。
    これをappendChildすると、リスト5が追加されました。

    静的と動的の違い

    HTMLCollectionとNodeListの違い

    HTMLCollectionの特徴として、動的に要素を取得ができるということです。
    実際に上記の方法で追加した後 li の要素数を表示させます。

    var nodelist = document.querySelectorAll('.list');
    var collection = document.getElementsByClassName('list');
    var $node = $('.list');
    console.log(nodelist.length);
    console.log(collection.length);
    console.log($node.length);
    
    3
    4
    3

    HTMLCollectionで取得した要素数が増えてます。
    いま表示されている最新の状態を動的に更新して取得できるのです。

    また、HTMLCollectionは、インデックスだけでなくid やnameでも取得することができます。

    var nodelist = document.querySelectorAll('.list');
    var collection = document.getElementsByClassName('list');
    console.log(nodelist['list1']);
    console.log(collection['list1']);
    
    undefined
    <li class="list" id="list1">リスト1</li>

    参考:NodeListとHTMLCollectionも別物なので気を付けよう。(DOMおれおれAdvent Calendar 2015 – 13日目)

    関連記事
    Comment







    (編集・削除用)


    管理者にだけ表示を許可
    Trackback
    http://tridentwebdesign.blog.fc2.com/tb.php/578-d127db1a
    検索フォーム
    熊本地震 支援・募金まとめ
    募集イベントバナー(1年生制作)
    BananaAd Banner
    プロフィール

    担当:Webデザイン学科+

    名古屋駅から歩いて6分、トライデントコンピュータ専門学校のWebデザイン学科を紹介します。

    トライデントロゴ

    質問などはLINEでどうぞ。

    友だち追加数
    Webデザイン学科実績
    <プレゼン>
    WCAN 2016 Springに参加してきました。
    WCAN 2015 Winterに参加しました。
    建設業入職者増加プロジェクトの発表会に参加
    WCAN 2015 Summerに参加してきました。
    WCAN 2013 Winterに参加
    WCAN(秋)に参加しました。
    無事、発表が終わりました【WordFes Nagoya 2013】
    WCAN 2013 Summerに参加してきました。
    WCAN 2011 Winter LT&LOGO
    学生がライトニングトークで話しました。
    <展示会>
    1年生進級展「お母さんの2度見展」を開催中です。
    「うぇ~~~~~~~ぶ2016」終了しました。ご来場ありがとうございました!
    「うぇ〜〜〜〜〜ぶ!!」終了。ご来場ありがとうございました!
    <コンテスト>
    NCF2014(スマホアプリ開発テーマ2) 準グランプリ獲得!
    最優秀賞!HTML5スマートアプリ&クリエイティブコンテスト
    NCF2013グランプリ受賞!!!
    <Webサイト制作>
    建設業入職者増加プロジェクト発表会
    Webサイト制作発表会2014
    99eagle Webサイトリニューアル公開
    99eagle Webサイト公開
    「Bloom*Block」Webサイト公開
    セントレア「日本の四季 キルト展」Webサイト公開
    かっぱ商店街サイト制作
    ココストア共同企画「アサココ!」公開
    <技能五輪全国大会>
    第53回技能五輪全国大会(ウェブデザイン職種)その3
    第52回技能五輪全国大会が開催されました。
    銀メダル・銅メダル獲得【第51回技能五輪全国大会】
    第49回技能五輪全国大会結果発表 敢闘賞受賞
    第48回技能五輪全国大会結果発表(銀賞・敢闘賞受賞)
    第47回技能五輪閉会式 & 結果発表
    第46回技能五輪
    <若年者ものづくり競技大会>
    第11回若年者ものづくり競技大会 2日目&結果
    第9回若年者ものづくり競技大会2日目(競技日)
    第8回若年者ものづくり競技大会2日目
    第7回若年者ものづくり大会
    第6回若年者ものづくり大会2日目
    第5回若年者ものづくり大会
    第4回若年者ものづくり競技大会閉会式
    Instagram
    学生ブログリンク
    <1年生ブログ>

    WF1でBLOG 2017

    <Webデザイン学科2年生ブログ>
    タグリスト 改

    トライデントコンピュータ専門学校Webデザイン学科WCAN業界研究技能五輪ウェブデザイン職種ウェブデザイン若年者ものづくり競技大会2013名古屋ポートフォリオECCコンピュータ専門学校2009WinterWebサイト学生ブログWordPressJavaScript映画Webデザイン2011Webサイト制作礒田優かっぱ商店街Wordpress入学式技能五輪全国大会卒業制作展ライトニングトークa-blogcms2014矢野りんNagoya面白法人カヤックCGイラスト学科Webテンプレート作成ホームページ・ビルダー瀬川大勝若年者ものづくり大会石黒雄介SummerオープンキャンパスAutumnAdobe杉本拓也IIJGIOhtml52010in大阪HCDアクセス解析第48回技能五輪全国大会1年生進級展2012ココストア東京研修名古屋駅アクアリングFlashmini2015あいちカレーラーメンコンテストウェブデザイン技能競技会Web制作会社体験入学Japangifアニメ愛知県専門学校水野裕太BananaAd田中睦翔合同企業展CentOSセントレアプロジェクトSpringラーメン99eagle企業訪問上村水月卒展卒業制作プレゼンテーション情報デザイン成田篤紀ブログパーツ情報デザインフォーラムウェブデザイン技能検定マール人間中心設計学生CSS3WebワークショップGoogleHTML55T(ファイヴティー)アサココ!CalendarディプロスAdvent導入授業MarkupjQueryレイアウト名古屋開府400年祭F-site豊田市美術館WordFes作品集WordCamp情報デザイン基礎form要素2008Webデザインギャラリーたこ焼きlabel要素fieldset要素textarea要素input要素legend要素ForumUXStoreスマートフォンBox和みAppleグループ制作鷹野雅弘CSS企業課題DTPWORLDアンティー・ファクトリー写真トライデント合同企業展笈瀬本通りAnalyticsカメラワークショップ結果発表産学協同モンキーワークスCSSNiteイラストマップ知多みるくoption要素ナゴヤドーム戸田芳裕WEBサイト制作者のためのHCDの理解in名古屋トライデント名商連ウェブデザイン技能競技大会堀尾真衣iPhoneFICCCMSカリキュラムSEOjbstyle中日ドラゴンズ岩手県塚本碧真鍋大度静岡ポートフォリオサイト卒業式メ~テレビジュアルエディタ会社訪問名古屋市科学館空気人形阿部淳也コミュニケーションデザインワークショップLike就職活動1年生作品展閉館日particlecanvasサーティファイ林田実樹Runstant初期設定佐藤歩熊谷佳紀学生インタビュースマホアプリ長屋めぐみうぇーぶoutput要素Webクリエイター能力認定試験謹賀新年まぼろしselect要素幕張メッセ坂本貴史ゆるキャラ津田直明閉会式デュエル・マスターズFlash-GameswonderfldotFes制作実績ブランディング映画のオープニングKyotoHCDプロセス長谷川恭久ロゴ公募FITC教育勉強会2016#infoeduコピーライティングCREAMAutumin小野裕子マークアップ演習スーパーエレメンツ原一浩山崎デザイン事務所ごはんとFlashマクロマリオネットYahoo!アニメーションMozoramaAO入試escalatoranimation第4回アックゼロヨン・アワードCG・イラストコンテストモーション演習後期プログラムクイズ今井佳子アイディグラフィックス学生参加グラフィックデザインCodePen入賞ガンダム河地芳明LPO世界のCMフェスティバルITホワイトボックスPHP勉強会イラストコンテストJAPANインターネットクリエイティブアワードカラーストリートビューIA/UXプラクティス大富豪スコアシート東京ゲームショウ2009沼田啓助UNIQLOCKギレン総帥ナゴヤデザインウィーク2009カークスヴィル人喰いの大鷲トリコ是枝裕和監督平野秀幸おかだよういち求人新世界道頓堀大沢たかおネスカフェゴールドブレンドフナ犬ウェブアートデザイナーレスポンシブWebデザイン職業実践専門課程出席率WCAN46学位専門士TAFF武豊アニメーションフェスティバルナゴヤ武将都市名古屋おもてなし武将隊ポートピア名古屋プロ野球WEBサイト制作者のためのHCDの理解技能五輪予選平野健太郎プロトコル分析伊藤頼子IAYORKE.ビジュアルデベロップメントunoplusバイドゥ仕事ワイヤーフレームうぇ~~~~~~~ぶ知多半島UI松坂屋美術館スタジオジブリ・レイアウト展合同制作合宿福みつ横浜デジタルアーツ専門学校3校合同発表会クリ博就職フェスタ日本電子専門学校鎌倉箱根合宿森川眞行会社見学ペルソナ&シナリオ法浅野智ペルソナ/シナリオ法情報デザイン教育勉強会ウェブDeBLOG坂本邦夫CMS特集WebデザイナーWebプログラマー横浜中華街新横浜ラーメン博物館Web制作のおしごとIA2010キックオフセミナー夢プロジェクト2009・成果報告会懇親会合宿餃子浜松合同制作ウェブリテラシー協会第一回セミナーWebディレクターAndNIKE慶華飯店ThenThereSalsaWasヨウイチ富岡聡PHP芸大美大デザイナーのためのプログラミング入門水野怜美料理株式会社LIGMAXNodeListHTMLCollection鳥取VideopuppetryASIA鳥取砂丘デザイン愛知県美術館アンドリュー・ワイエスFLASHFLEX醐りょうCS4サムライDesignデッサン造形基礎WebリテラシーTEXTURE中村勇吾ドラマNightCollegeInstagramインスタグラム佐藤可士和SakaeSIGGRAPHappendChild()デザインコンテスト01CONTESTHPデザイン制作合宿ECMAScriptES6ES2015THEWEBProxyカンファレンス学校ウェブデザイン部門WCAN2017SpringSyntaxHighlighterv4.0.1ライデントコンピュータ専門学校お母さんの二度見展デザインのへそ進級展HelveticaWebDirectionEast'082008WinterWebプログラミング初級講座マイクロソフトXRAYSagmeisterStefan丹下紘希学習茂森仙直NamArtlessW+KTokyo(+CRUZ)QubibiHTML+CSS基礎ActionScript基礎カスタマイズセミナークイズIndependence駅麺通り涼麺黒い太陽ウルトラ展ヤノベケンジDay:Resurgence荒俣宏タカガールサイトファルコム音楽フリー宣言UNIQLOCALENDARプラネタリアン水曜日のカンパネラjsdo.itライブペイントサーバー学科JSFiddleカナバングラフィックスウサビッチソバットシアターコマ撮りアニメ電信柱エレミの恋Plunker旭食品サンプル製作所西田幸司国家検定インターネットスキル認定普及協会ヱヴァンゲリヲン新劇場版:破ActionScript食品サンプルCodeply音楽ゲームVIIFANTASYFINALADVENTCHILDREN学園祭再進学COMPLETEアートアニメーション武豊町驛麺通りいな世プレゼン演習西村真里子WCAN×CSSNiteTAFF'09広告批評情報系MonacaジムナストコロンセキュリティGENOウィルスデコクレ山村浩二日本ファルコム□□□switch日清食品グループワークスコーポレーション「ヤノベケンジ-ウルトラ」展Labuat学生作品集TokyoUTZOOMBlogサイバーエージェント沖縄JSBinシナリオそこにいない。展PARTYPerfumeあいちトリエンナーレ2013HighlighterWebデザイン演習CrayonSyntaxbyinspiredThree.js木下健太郎森田霞プレゼンたにぐちまことRhizomatiks田代豊第51回技能五輪全国大会2015年度NEXT高橋雅人カレーラーメンCOMMUNICATIONAWARDスマートフォンサイトUI図鑑美術大学芸術大学麺やOK麺屋ココイチ嵐が如くWF1でBLOG新入生晴れやかさかなやフジ家55インターンシップ就職東京Facebookページ竹中民男八木智章SVGIllustrator第50回結果長野ベースキャンプ名古屋Scrollmagic第7回若年者ものづくり競技大会ScrollMagicVelocity.js東京ゲームショウ2012TOKYOSHOWGAMEJQuery張山大祐モリサワFacebookたこ焼きパーティウェブアクセシビリティみんなのICT佐藤ねじマークアップエンジニアWeb制作合宿アップルップルYahoo!JapanMuse画像をチェックボタンにする夏麺フェア飯田淳介木村哲朗フロントエンドエンジニアNCF2013NTTドコモ東海支社スパルタキャンプ岩出本店丸田屋柏木祥太名古屋市営地下鉄特別授業オリエンタル青空学区丸高アロチ本家本州最南端串本八鬼山那智の大滝大門坂和歌山中華そば熊野三山AOAnimation授業アイチータ結団式ネイルサロンマウアアイテムカンパニーtype属性keygen要素紅茶専門店Liyn-an愛知県選手団datalist要素加藤ひとみ西岡克真第52回技能五輪全国大会山田拓生青山敬司button要素HTML熊野古道マカベン10日でおぼえるLinuxサーバー入門教室名古屋駅麺通り卒業研究制作展NTTドコモ東海トライデント合同企業説明会googleGWDF81教室最優秀賞ジョルテdisplaylist-style-typeCSS3&jQueryで作るlist-itemモテ声ボーダーKDDIHTML5スマートアプリ&クリエイティブコンテストDesignerparseInt()石原愛実ランチ麺の匠宇野剛志テーブル名古屋マークアップ勉強会table親孝行中村健太NCF2014備忘録parseFloat()栗山聡一新年のご挨拶道家陽介concrete5尾花大輔Bloom*BlockGoogleAnalytics石井研二カメラワークKaizenアクティビティシナリオ田中稚妃呂源賢司横浜デジタルアーツPlatformグロースハックCODEポスターデザイン・コンペティション小林信次増田悟グロースハッカー中部国際空港株式会社株式会社アクアリングブラザー工業株式会社大西健太Lazy笈瀬本通商店街名古屋市中村区FLAVER3.0UXデザインキルターズフェスティバル2011GAINAXSUBARU放課後のプレアデスFLV8341-3:2010forPluginLoadSlimbox2ウェブリテラシー協会XJIS名古屋サイト改善研究会中級編ITCIRCUS柴乃櫂人広島弁AndrioidWEBサイト制作者のためのHCD(人間中心設計)の理解ポートフォリオアイデア帳名古屋グランパスチタハン10iPhone4optgroup要素商店街金シャチ商店街名古屋メディアボンドタロヲ細川太郎ペルソナ1→10design採用担当者の心に響く笈瀬本通Ultimate14商店サイト制作GA愛知商業高校名駅経済新聞名チャリプチ・フレーズ三蔵ポスターデザイン・コンペディションCODE名古屋クリエイターフットサルグラフィクデザイン高校みの治商店Twitter中部国際空港日本の四季東京ゲームショウ神戸神戸国際展示場ゲーム大賞アマチュア部門Ohanaクリスマスロゴマークメールマガジン東京コスモライアン・ウッドワードマーサ・グレアム5月11日松田洋樹プラネタリウム鈴木3DCG静岡県ツインメッセ静岡アクセシビリティからはじめる、WebサイトのUXデザイ建設経営者倶楽部ワクワク建設タウンNHNWebアクセシビリティBloosumTeamイマジンカップStationFuture熊﨑彩迎春敢闘賞2011年度第53回docomoドコモGoogleロゴゴールデンウィーク卒業制作・研究発表会2011FlexibleBoxぬいぐるみのラパン英国王のスピーチFlexboxトライデントカレッジUntitled!!!!!!!!味仙KtaistyleCustomSmilies愛知県立芸術大学Dmm.comキルト展卒業・修了制作展円JOY!map絵文字岡田陽一CGスペシャリストみつけもの恵那市岩村プロジェクションマッピング愛知淑徳大学ドラゴンゲートGATEDRAGONバルサマン3DTPの勉強部屋ablogcmsターミナル伊達千代北岡弘至JAPANWORLDCUPMagnumアクセシビリティ

    zenback
    メールフォーム

    名前:
    メールアドレス:
    件名:
    本文:

    東京コスモ
    トライデントコンピュータ専門学校
    Pagetop