ajaxで別ページのHTMLを取得して、指定したDOMの中に挿入する時に、ajaxで指定したDOM全体を挿入するときにつまづいたので、その備忘録です。
この記事の目次
修正版のajaxのコードはこちら
script.js
$(function(
$.ajax({
type: 'GET',
url: 'content.html', // 呼び出すURL
dataType: 'html',
success: function(data) {
$('#conteiner').html(data.find('#target').outerHTML);
// content.html の id="target" の要素を、
// script.js を呼び出したページの id="conteiner" に挿入します。
}
});
));
ajaxを利用して別のページからHTMLを取得
ajaxを利用してcontent.htmlのHTMLを、index.htmlの#conteinerのDOM内に挿入しようと試みました。
最初に書いたコードは以下になります。
index.html <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>テスト</title> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script type="text/javascript" src="script.js"></script> </head> <body> <div id="conteiner"></div> </body> </html>
conttent.html <div id="target"> <p>hello world!!</p> </div>
script.js
$(function(
$.ajax({
type: 'GET',
url: 'content.html',
dataType: 'html',
timeout: 3000,
success: function(data) {
$('#conteiner').html(data.find('#target').html());
}
});
));
想定していた結果
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テスト</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript" src="funct.js"></script>
</head>
<body>
<div id="conteiner">
<div id="target">
<p>hello world!!</p>
</div>
</div>
</body>
</html>
実際に動作後のHTML構造
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>テスト</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript" src="funct.js"></script>
</head>
<body>
<div id="conteiner">
<p>hello world!!</p>
</div>
</body>
</html>
ajaxでセレクターに指定した『#target』は含まれず、『#target』の中の要素だけが抜き取られる結果になりました。
上手くいかなかった点
『find』で取得した要素をそのまま『.html()』で挿入するだけでは、セレクターに指定した要素は含まず、包含されたHTMLのみ表示されてしまうようです。
対策して修正した箇所
script.js
$(function(
$.ajax({
type: 'GET',
url: 'content.html',
dataType: 'html',
success: function(data) {
$('#conteiner').html(data.find('#target').html());
}
});
));
を下記に変更
script.js"
$(function(
$.ajax({
type: 'GET',
url: 'content.html',
dataType: 'html',
success: function(data) {
$('#conteiner').html(data.find('#target').outerHTML);
}
});
));
若しくはこちら
script.js
$(function(
$.ajax({
type: 'GET',
url: 'content.html',
dataType: 'html',
success: function(data) {
$('#conteiner').html(document.getElementById('#target'));
}
});
));
まとめ
javascriptのメソッドの『getElementById』と『find()』で呼び出す要素はちょっと違うんですね。勉強になりました。。