taquaki-satwo
11/27/2017 - 3:16 PM

DOM操作

JS-DOM操作

// # DOMツリー

// ノードオブジェクトのDOMツリーの階層を表すプロパティ
// テキストノード、空白ノードを無視しない
console.log(document.childNodes);
console.log(document.firstChild);
console.log(document.lastChild);
console.log(document.lastChild.parentNode);
console.log(document.firstChild.nextSibling);
console.log(document.lastChild.nodeType);
console.log(document.lastChild.nodeValue);
console.log(document.lastChild.nodeName);

// ノードオブジェクトのHTMLツリーの階層を表すプロパティ
// テキストノード、空白ノードを無視する
console.log(document.children);
console.log(document.firstElementChild);
console.log(document.lastElementChild);
console.log(document.lastChild.parentElement);
console.log(document.firstChild.nextElementSibling);
console.log(document.lastChild.previousElementSibling);
console.log(document.lastChild.childElementCount);

// # ノードオブジェクトの取得
document.getElementById('id');
document.getElementsByTagName('tag'); // -> NodeListは生きている
document.getElementsByClassName('class'); // -> NodeListは生きている
document.getElementsByName('name'); // -> NodeListは生きている

document.querySelectorAll('CSS_selector'); // -> NodeListは生きていない
document.querySelector('CSS_selector');

// Documentオブジェクトのプロパティ
document.documentElement;
document.head;
document.body;
document.forms[]; // -> HTMLCollectionオブジェクト
document.images[]; // -> HTMLCollectionオブジェクト
document.anchors[]; // -> HTMLCollectionオブジェクト
document.applets[]; // -> HTMLCollectionオブジェクト
document.links[]; // -> HTMLCollectionオブジェクト
document.images[]; // -> HTMLCollectionオブジェクト
document.embeds[]; // -> HTMLCollectionオブジェクト
document.plagins[]; // -> HTMLCollectionオブジェクト
document.scripts[]; // -> HTMLCollectionオブジェクト

// # 属性値の取得と設定
element.attribute // -> 標準的な属性の属性値の取得
element.getAttribute('attribute');
element.setAttribute('attribute');
element.hasAttribute('attribute');
element.removeAttribute('attribute');

element.attributes // -> NamedNodeMapオブジェクト

// # 要素内容の取得と設定
element.innerHTML // -> 要素内のHTMLコード
element.textContent // -> Webページで表示されるテキスト
element.innerText // -> IE9以前

function textContent(element) {
  var content = element.textContent;
  if (content !== undefined) return content;
  return element.innerText;
}

// # ノードの作成
document.createElement('element'); // -> 要素ノードオブジェクト
document.createTextNode('text'); // -> テキストノード
document.createAttribute('attribute');
document.createComment('text');
document.createDocumentFragment();
document.importNode(他文章のノード, deep); // -> 他文章ノードの複製 deepをtrueで子孫ノードも複製
node.cloneNode(deep); // -> ノードの複製

// # ノードの挿入
element.appendChild('node');
element.insertBefore('node', 子ノード);

function elt(name, attributes) {
  const node = document.createElement(name);
  if (attributes) {
    for (let attr in attributes) {
      if (attributes.hasOwnProperty(attr)) {
        node.setAttribute(attr, attributes[attr]);
      }
    }
  }
  for (let i = 2; i < arguments.length; i++) {
    let child = arguments[i];
    if (typeof child == 'string') {
      child = document.createTextNode(child);
    }
    node.appendChild(child);
  }
  return node;
}

const bloodtypes = ['A', 'B', 'O', 'AB'];
const form = elt('form', { id: 'menu' });
const select = elt('select', { name: 'bloodtype', id: 'bloodtype' });
bloodtypes.forEach(function (type) {
  select.appendChild(elt('option', null, type));
});
form.appendChild(select);
document.body.appendChild(form);

// # ノードの削除
node.removeChild(子ノード);
node.parentNode.removeChild(node);

// # ノードの置換
node.replaceChild(newnode, 子ノード);
node.parentNode.replaceChild(newnode, node);