C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: Dom要素(Domオブジェクト)の属性についての質問


(過去ログ 149 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■86770 / inTopicNo.1)  Dom要素(Domオブジェクト)の属性についての質問
  
□投稿者/ Sasaki (3回)-(2018/03/14(Wed) 10:11:06)

分類:[JavaScript] 

Dom要素(Domオブジェクト)の属性についての質問
(1)Dom要素の属性を設定/変更する方法は、以下のように3つの方法があると認識しているのですが、正しいでしょうか。
(2)また、style属性以外のHTMLで定義されていない属性を設定/利用してもよいものなのでしょうか。
	例えば、divElement.select = function() {...};
	などとして、独自のメソッドや属性を追加/利用してもよいものなのでしょうか?
	(正しく動作するけど、なんか気持ち悪く感じます。やるべきではない理由などがありましたら教えていただけると助かります。)

---以下、属性取得方法の例です。
<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<meta http-equiv="Content-Script-Type" content="text/javascript">

	<script type="text/javascript">
		var init = function(event) {
			var divElement =document.getElementById('div_tag');
			divElement.style = 'color:blue';		// [1]
			divElement['style'] = 'color:blue';		// [2]
			divElement.setAttribute('style', 'color:blue');	// [3]
		};
	</script>
</head>

<body onload="init()" >
	<div id="div_tag" style="color:red">Divタグ</div>
</body>
</html>

引用返信 編集キー/
■86772 / inTopicNo.2)  Re[1]: Dom要素(Domオブジェクト)の属性についての質問
□投稿者/ 魔界の仮面弁士 (1588回)-(2018/03/14(Wed) 12:58:15)
2018/03/14(Wed) 13:00:13 編集(投稿者)

No86770 (Sasaki さん) に返信
> divElement.style = 'color:blue'; // [1]
> divElement['style'] = 'color:blue'; // [2]
前者はドット表記法
後者はブラケット表記法ですね。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Property_Accessors

両者の意味は同じですが、数値やハイフンで始まるメンバー名の場合は、
ドット表記ではアクセスできないため、その場合は
ブラケット表記法を用いてアクセスする必要があります。


> (2)また、style属性以外のHTMLで定義されていない属性を設定/利用してもよいものなのでしょうか。

style オブジェクトにメンバーを追加するという話でしょうか。
それとも、style 以外の属性を利用したいという話でしょうか。

HTML の要素の定義と DOM 側のプロパティは、それぞれ分けて考えてください。

DOM オブジェクトへのメンバー追加は、仕様的には問題ありませんが、
HTML の記述として、未定義の属性を含めてよいのかどうかは、また別の話です。

HTML5 だと、一般的にはカスタムデータ属性として data-* を使うようになっています。
カスタムデータ属性へのアクセスは、dataset IDL 属性を使うのが一般的です。
 alert(divElement.dataset.address);

XHTML の場合、未定義の属性を使うことは XML の妥当性検証としては NG となります。
ただし整形式の XML とはなりえますし、名前空間を分ければ別の属性を扱うことも出来ます。


> 例えば、divElement.select = function() {...};

先述の通り、DOM 上で新しい独自メンバー(プロパティ/メソッド)を追加することは
動作的には問題ありません。

しかし、<textarea> や <input type="text"> のオブジェクトにも
select という同名メソッドがあるので、既存の同名メンバーを上書きしたり、
他の開発者を混乱させるような実装としないようにするなどといった
配慮は必要かと思います。



> (1)Dom要素の属性を設定/変更する方法は、以下のように3つの方法があると認識しているのですが、正しいでしょうか。

DOM のどの属性を対象にしているのか、にもよります。
殆どの場合、DOM のプロパティ名は属性名と一致しますが、
中には属性名のプロパティが使えないものもあります。

たとえば <div class="old"> の『class 属性』を読み書きする場合、
[3] の getAttribute / setAttribute を使う場合には、
 var cls = divElement.getAttribute("class");
 divElement.setAttribute("class", cls + " example");
などと書けますが、[1] や [2] の構文では "class" ではなく
"className" を使わねばなりません。
 divElement.className = "new";


また、
 <input type="checkbox" id="chk1" checked>
 <input type="checkbox" id="chk2">
なども注意が必要です。

[1] の構文を使う場合、
defaultChecked プロパティ(HTML ページ上で最初に読み込まれたときの初期値)と
checked プロパティ(現在のチェック状態値)という 2 種類が存在し、
そのいずれもが boolean 型の値を使用しています。
 var val3 = document.getElementById("chk1").defaultChecked; // true
 var val4 = document.getElementById("chk2").defaultChecked; // false
 var val5 = document.getElementById("chk1").checked; // true または false
 var val6 = document.getElementById("chk2").checked; // true または false
 document.getElementById("chk2").checked = true; // 文字列 "checked" を代入するのは誤り


一方 [3] による "checked" 属性へのアクセスでは、string 型の値が使われることになります。
こちらは、[1] で言う所の defaultChecked プロパティの操作に相当しますが、
完全に同じと言うわけではありません。
 var val1 = document.getElementById("chk1").getAttribute("checked"); // "checked"
 var val2 = document.getElementById("chk2").getAttribute("checked"); // null
 document.getElementById("chk1").removeAttribute("checked");


このほか、旧 IE における style / currentStyle / runtimeStyle のような
パターンもありますね。
 // DOM Level 2 Style
 var currentStyleStandard = window.getComputedStyle(divElement, null);
 // safari
 var currentStyleSafari = document.defaultView.getComputedStyle(divElement, null);
 // 古いIE
 var currentStyleOldIE = divElement.currentStyle;
引用返信 編集キー/
■86774 / inTopicNo.3)  Re[2]: Dom要素(Domオブジェクト)の属性についての質問
□投稿者/ Sasaki (4回)-(2018/03/14(Wed) 13:57:03)
ありがとうございます。IDL属性というキーワードを元にいろいろ調べることができました。

>>> > (2)また、style属性以外のHTMLで定義されていない属性を設定/利用してもよいものなのでしょうか。
>>> style オブジェクトにメンバーを追加するという話でしょうか。それとも、style 以外の属性を利用したいという話でしょうか。
はい、後者で、style以外の属性を利用したいです。

>>> HTML の要素の定義と DOM 側のプロパティは、それぞれ分けて考えてください。
>>> DOM オブジェクトへのメンバー追加は、仕様的には問題ありませんが、HTML の記述として、未定義の属性を含めてよいのかどうかは、また別の話です。
DOM側のプロパティ設定の話になると思います。

シンプルなGUI部品(ボタン、ラジオボックス、チェックボックスなど)を作成したく、どのような設計がベストなのか悩んでいました。
次の、二つの方法を候補としていたのですが、どちらの方法でも、仕様上は問題ないことが分かりました。
(a)DOMオブジェクトに、GUI部品として必要なメソッド/属性を追加する。
(b)DOMオブジェクトをラップ(内包)した、JavaScriptのクラス(prototypeを利用した疑似的なクラス)を作成し、GUI部品として必要なメソッド/属性を追加する。
利用しやすさなど他の要素から、どちらがよいか検討を続けていこうと思います。
ありがとうございます。

引用返信 編集キー/
■86780 / inTopicNo.4)  Re[3]: Dom要素(Domオブジェクト)の属性についての質問
□投稿者/ Sasaki (5回)-(2018/03/15(Thu) 09:32:11)
解決済印をつけました。
ありがとうございました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -