JavaScriptとjQuery間でDOMの要素を共有するには?
jQueryのオブジェクトは配列のようなラッパー(wrapper)に格納されているので、
JavaScriptでそのまま使用することはできません。
jQueryのラッパーからJavaScriptで使用するDOMの要素を取得するには「$('#jqId')[0]」のように記述するか「$('#jqId).get(0)」のように記述します。
ちなみに、前者の方が高速ですから「$('#jqId')[0]」を使用してください。
JavaScriptを使うかjQueryを使うか悩みますが、個人的には①コーディング量、②パフォーマンスを判断基準にして決めています。
var dom = $('#jqId')[0]; // var dom = document.getElementById('jqId')に相当
dom.textContent = 'Hello JavaScript!'; // jQueryで取得したオブジェクトをJavaScriptで共有
JavaScriptで取得したDOMの要素はjQueryのオブジェクトとしてそのまま利用できます。
var dom = document.getElementById('jqId'); // var dom = $('#jqId')に相当
$(dom).text('Hello jQuery!'); // JavaScriptで取得したDOMの要素をjQueryで共有
JavaScriptとjQueryの比較 [1]
表1: JavaScript vs jQuery
1. IdでHTML要素を検索 |
var element = $('#myId'); |
var element = document.getElementById('myId'); |
2. タグ名称でHTML要素を検索 |
var elements = $('div'); |
var elements = document.getElementsByTagName('div'); |
3. CSSのクラス名で検索 |
var elements = $('.myClass'); |
var elements = document.getElementsByClassName('myClass'); |
4. CSSのセレクターで検索 |
var elements = $('div.myClass'); |
var elements = document.querySelectorAll('div.myClass'); |
5. テキストコンテンツを設定 |
$('#myId').text('Hello jQuery!'); |
document.getElementById('myId').textContent = 'Hello JavaScript!'; |
6. テキストコンテンツを取得 |
var text = $('#myId').text(); |
var text = document.getElementById('myId').textContent; |
7. HTMLコンテンツを設定 |
$('#myId').html('<span>Hello jQuery!</span>'); |
document.getElementById('myId').innerHTML = '<span>Hello JavaScript!</span>'; |
8. HTMLコンテンツを取得 |
var html = $('#myId').html(); |
var html = document.getElementById('myId').innerHTML; |
JavaScriptとjQueryの比較 [2]
表2: JavaScript vs jQuery
1. 要素の非表示 |
$('#demo').hide(); |
document.getElementById('demo').style.display = 'none'; |
2. 要素の表示 |
$('#demo').show(); |
document.getElementById('demo').style.display = ''; |
3. 要素の削除 |
$('#demo").remove(); |
document.getElementById('demo').remove(); |
4. CSSの追加 |
$('#demo').css('font-size','35px'); |
document.getElementById('demo').style.fontSize = '35px'; |
5. 複数のCSS追加 |
$('#demo').css({'font-size': '35px', 'color': 'red'});
or
$('#demo').attr('style', 'font-size:35px; color:red;');
|
document.getElementById('demo').style.fontSize = '35px';
document.getElementById('demo').style.color = 'red';
|
操作手順と解説
-
Run 1-6の右側に表示されているリンクをクリックすると、リンクに記述されているjQuery/JavaScriptのコードが実行されます。
-
実行結果は「Trace Data:」に表示されます。
たとえば、jQueryの「$('#myId')」のリンクをクリックするとjQueryのコード「$('#myId')」が実行されて見つかった要素のID属性が「Trace Data:」に表示されます。
jQueryの実行結果は「赤」、JavaScriptの実行結果は「青」で表示されます。
-
リンクをクリックすると次のようがコードが実行されて結果が「Trace Data:」に表示されます。
JavaScriptのTraceWriteOption(), TraceWrite()については「Article014で解説しています。
var opt = new TraceWriteOption();
opt.trace = true;
opt.foreColor = 'red';
opt.bgColor = 'white';
// Run 1のjQueryのリンククリックに実行
$('.run1JQ').click(function () {
var e = $('#myId')[0];
opt.foreColor = 'red';
TraceWrite('Run 1(JQ): id={0}'.format(e.id), opt);
});
// Run 1のJavaScriptのリンククリックに実行
$('.run1JS').click(function () {
var e = document.getElementById('myId');
opt.foreColor = 'blue';
TraceWrite('Run 1(JS): id={0}'.format(e.id), opt);
});