jQuery – HTML文字列を取得・変更する『 html() 』

要素内にあるHTML文字列(HTMLタグが含まれた文字列)を取得・変更する場合は「html()」を使います。

取得する場合は「html()」、変更する場合は「html(”変更後の文字列”)」を指定します。

//id=msg内のHTML文字列を取得します。
$("#msg").html();
//id=msg内のHTML文字列を変更します。
$("#msg").html("<p>文字を変更しました。</p>");

HTML要素が含まれている場合、HTMLタグも扱うことができます。
「text()」と動きが似ていますが、text()の場合はHTMLタグは文字として解釈されます。下記サンプルで両方を用意したので動作を試してみて下さい。

jQuery – html サンプル

また「html()」を使うとき、「 "(ダブルクオート)」に注意して下さい。
例えば下記のように書くとエラーになります。

$("#msg").html("<p class="msg">文字を変更しました。</p>");

これは「 "(ダブルクォート)」で挟んだものが「文字列」として認識されるため、「"msg"」のところで一旦区切れてしまい、それ以下の記述がJavascriptのルールから外れてしまうからです。

そこでこれを回避するために、全体を「 ‘(シングルクォート)」で囲みます。

//中に「 "(ダブルクォート)」がある場合は「 '(シングルクォート)」で囲みます。
$("#msg").html('<p class="msg">文字を変更しました。</p>');

「 ‘(シングルクオート)」で囲むとその中にある「 "(ダブルクォート)」を文字列として扱ってくれるようになります。

自分自身、基本は「 "(ダブルクォート)」を利用するので、上記のような場合「 ‘(シングルクォート)」に変え忘れてしまうことがあります…。注意しましょう。

jQueryでページ内スムーズスクロール

jQueryでページ内リンクをスムーズに移動(ページトップへ等)するものを作ろうと思いいろいろ調べていたら、いいページを見つけたので早速試してみました。

We Ain’t Seen Nothin’ Yet. : [Rails meets jQuery] jQueryで作るページ内目次とスムーススクロール

上記の記事では「Interface.js」を利用しているようなのですが、動作させるコードを読んでいるとInterface.jsをどこで使っているかわからなかったので、jQueryだけで動作確認すると、とりあへず動きました。jQueryの古いバージョンでは「scrollTop」がjQuery自体に含まれていなかったのかもしれませんが、最近jQueryをいじり始めたため詳しいことはわかりません…。

ということでコードはほぼそのまま利用させていただき、スクロール動作だけを変更しています。
使用ファイルは「jquery-1.2.6.min.js」と「jquery.easing.1.3.js」を利用しています。

使用ライブラリ・プラグインダウンロード先
Downloading jQuery – jQuery JavaScript Library(jquery-1.2.6.min.js)
jQuery Easing Plugin(jquery.easing.1.3.js)

サンプル
jQueryでページ内スムーズスクロール サンプル

Javascritp部分

$(function() {
	$('a[href*=#]').click(function() {
		if (location.pathname.replace(/^€\//,'') == this.pathname.replace(/^€\//,'') && location.hostname == this.hostname) {
			var target = $(this.hash);
			target = target.length && target;
			if (target.length) {
				var sclpos = 30;
				var scldurat = 1200;
				var targetOffset = target.offset().top - sclpos;
				$('html,body')
					.animate({scrollTop: targetOffset}, {duration: scldurat, easing: "easeOutExpo"});
				return false;
			}
		}
	});
});

「var sclpos = 50」で止まる位置にどれぐらい「上に隙間」をあけるか位置を調節できます。「0」を指定すればぴったりの位置、50を指定すると50px余裕を持った位置で停止します。
「var scldurat = 1200」で移動スピードを調節できます。大きい数字ほどゆっくりスクロールします。

HTML部分

… 省略 …
<div id="top">
<h1>jQueryでページ内スムーズスクロール</h2>
<a href="#no1">タイトル1</a> | <a href="#no2">タイトル2</a> | <a href="#no3">タイトル3</a> | <a href="#no4">タイトル4</a>
</div>
<div id="box1">
<h2 id="no1">タイトル1</h2>
… 省略 …
<a href="#top">ページトップへ</a>

リンクに移動先に割り当てたID名を記述するだけです。

ちょこちょこっとMac・Winで動作確認しましたが、動いているようなのでひとまずよしとしておきましょう…。

では今回はこのへんで。

アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。

アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。

jQuery – テキストを取得・変更する『 text() 』

要素内にあるテキストを取得・変更する場合は「text()」を使います。

取得する場合は「text()」、変更する場合は「text(“変更後の文字列”)」を指定します。

//id=#msg内のテキストを取得します。
$("#msg").text();
//id=#msg内のテキストを「文字を変更しました。」に変更します。
$("#msg").text("文字を変更しました。");

サンプル1

jQuery – text サンプル1

<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<title>jQuery - text サンプル1</title>
<script type="text/javascript" src="../jquery-1.2.6.min.js"></script>
<script language="JavaScript">
$(function (){
	$("#box1").click(
		function(){
			$(this).text("マウスをはずしてください。");
			$(".msg").text("クリックされました。(#box1内のテキストは「"+$(this).text()+"」)");
		}
	);
	$("#box1").hover(
		function(){
			$(this).text("クリックしてください。");
			$(".msg").text("マウスが乗っています。(#box1内のテキストは「"+$(this).text()+"」)");
		},
		function(){
			$(this).text("マウスを乗せて下さい。");
			$(".msg").text("マウスが外れました。(#box1内のテキストは「"+$(this).text()+"」)");
		}
	);
});
</script>
<style type="text/css">
#box1 {
	width: 150px;
	height: 150px;
	border: 1px solid #cccccc;
	background-color: #efefef;
}
</style>
</head>
<body>
<div id="box1">
マウスを乗せて下さい。
</div>
<p class="msg">まだ何もイベントがありません。</p>
</body>
</html>

「$(this).text()」と記述している場所があると思いますが、英語そのままの「この」という意味合いです。上記のサンプル1の$(this)は「$(“#msg”).click」の中で利用しているので「クリックされたid=msgの」という意味合いになります。thisについては少し説明がムヅカしい(自分自身がなんとなく使ってしまっている…スミマセン)ので、もし理解を深めたい方は下記サイトに、jQueryのthisに関する記事をかかれているのでそちらをご覧くださいませ…。

anything from here jQueryに学ぶJavascriptの基礎(2) this 活用──jQuery解読(17)

もうひとつサンプルを用意しました。

サンプル2

jQuery – text サンプル2

<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<title>jQuery - text サンプル2</title>
<script type="text/javascript" src="../jquery-1.2.6.min.js"></script>
<script language="JavaScript">
$(function (){
	var cmArray = new Array("情熱や怒り","堅実や冷静","癒しや調和");
	$("html").css("font-size","2em");
	
	$("li").click(
		function(){
			var cmTxt = cmArray[$("li").index(this)];
			$(".msg").text("『 "+$(this).text()+" 』は"+cmTxt+"を表す色です。");
		}
	);
});
</script>
</head>
<body>
<p class="msg">好きな色をクリックしてください。</p>
<ul>
<li>赤</li>
<li>青</li>
<li>緑</li>
</ul>
</body>
</html>

$(this)については「$(“.msg”).text(“『 “+$(this).text()+” 』は”+cmTxt+”を表す色です。”);」の「$(this).text()」を「$(“li”).text()」に変更して動作を試すと、なるほど!となるやもしれません。

jQuery – text サンプル $("li").text()のサンプル

「$(this).text()」の場合はクリックした場所のテキストのみ表示されますが、「$(“li”).text()」に変更すると「liタグ内のテキスト」がすべて表示されます。$(this).text()は「$(“li”).clickのテキスト=クリックされたliタグのテキスト」という意味合いになり、$(“li”).text()は「HTML内すべてのliのテキスト」という意味合いになります。

thisは利用する場合が多いので、なんとなくでも意味をつかんでおきましょう。