jQuery
jQuery構成
・Selectors
・Events
・Effects
・HTML
・CSS
・AJAX
・Misc
現時点の最新版(2013/03/20)
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
jQuery 1.7.0 Cheat Sheet
DOMオブジェクト⇒jQueryオブジェクト
jQueryオブジェクト = $(DOMオブジェクト)
例:
var v = document.getElementById("v"); //DOMオブジェクト
var $v = $(v); //jQueryオブジェクト
空jQueryオブジェクト
var container = $([]);
container.add(xxx);
画面DOM調査
console.log($('*').length);
★Selectorについて
効率降順
$parent.find('.child') 推薦
$parent.children('.child')
$('#parent > .child')
$('#parent .child')
★DOM操作
$("div#home").prev("div");
$("div#home").next("ul");
$("div#home").parent();
$("div#home").children("p");
★チェック
//空かどうか
if (! $('#target').html())
或いは
if ($('#target').is(":empty"))
//可視化 .hide()、.show()
if($(element).is(":visible") == "true") {
...
}
★クローン
var cloned = $('#xxx').clone();
// Shallow copy
var newObject = jQuery.extend({}, oldObject);
// Deep copy
var newObject = jQuery.extend(true, {}, oldObject);
★活性・非活性
//enterキー禁止
$("#form").keypress(function(e) {
if (e.which == 13) {
return false;
}
});
$("#button").attr("disabled", true);
$("#button").removeAttr("disabled");
//右クリック禁止
$(document).bind('contextmenu',function(e){
return false;
});
//入力後、使用可能
$('#username').keyup(function() {
$('#submit').attr('disabled', !$('#username').val());
});
★jQueryによりRESTful Webサービスをアクセスする例
var url = "http://www.example.com/service/customer/";
//JSON構造:{"customer":{"id":"xxx","name":"xxx","birthday":"xxx"}}
var jsonMsg =
"{\"customer\":{\"id\":\"{0}\",\"name\":\"{1}\",\"birthday\":\"{2}\"}}";
●検索
var userId = $("#userId").val();
$.ajax({
type:"GET",
url:url + "get/" + userId,
dataType:"json",
success:function(data){
var resultObj = $("#result");
if(data === null) {
resultObj.html("見つかりませんでした。");
return;
}
var txt = format("名前:{0}, 誕生日:{1}",
data.customer.name, data.customer.birthday);
resultObj.html(txt);
},
error: function(xhr, type, exception){
alert(type);
}
});
●作成
var userName = $("#userName").val();
var userBirthday = $("#userBirthday").val();
var data = format(jsonMsg, "", userName, userBirthday);
$.ajax({
type:"POST",
url:url + "create",
data:data,
//data: $('#form1').serialize(), // Key=Value&Key2=Value2
dataType:"json",
contentType: "application/json; charset=utf-8",
success: function(data){
var resultObj = $("#result");
if(data === null) {
resultObj.html("作成できませんでした。");
return;
}
var txt = format("「名前:{0}, 誕生日:{1}」が作成されました。",
data.customer.name, data.customer.birthday);
resultObj.html(txt);
},
error: function(xhr, type, exception){
alert(type);
}
});
●変更
var userId = $("#userId").val();
var userName = $("#userName").val();
var userBirthday = $("#userBirthday").val();
var data = format(jsonMsg, userId, userName, userBirthday);
$.ajax({
type:"PUT",
url:url + "update",
data:data,
dataType:"json",
contentType: "application/json; charset=utf-8",
success:function(data){},
error: function(data){ ←※現時点の設計では成功してもerrorに入って判断する
var resultObj = $("#result");
if(data.responseText === "NG"){
resultObj.html(userId + "に対応する情報がありません。");
return;
}else if(data.responseText === "OK"){
resultObj.html(userId + "が変更されました。");
return;
}
alert(errMsg);
}
});
●削除
var userId = $("#userId").val();
$.ajax({
type:"DELETE",
url:url + "delete/" + userId,
success:function(data){
var resultObj = $("#result");
if(data === "NG"){
resultObj.html(userId + "に対応する情報がありません。");
return;
}
resultObj.html(userId + "が削除されました。");
},
error: function(xhr, type, exception){
alert(type);
}
});
★用法の比較
テスト対象
<input type="text" id="txt_name" maxlength="10" />
<br />
<ul>
<li><div>AAA</div></li>
<li>BBB
<ul>
<li>aaa</li>
<li>bbb</li>
</ul>
</li>
<li>CCC</li>
</ul>
<span><p>Hello</p></span>
$.fn.extend({})と$.extend({})
$.fn.extend({
showName: function() {
var result = $.trim($(this).val());
alert(result);
}
});
$('#txt_name').showName();
別の書き方
function($) {
$.fn.showName = function() {
...
return this;
};
})(jQuery);
※jQuery自体ではなく、plug-inという形
$.extend({
showName: function(name) {
var result = $.trim(name);
alert(result);
}
});
$.showName($('#txt_name').val());
var obj1 = { foo: "bar" };
var obj2 = { foo: "baz" };
var newObj = $.extend( obj1, obj2 );
console.log( obj1.foo ); // "baz"
console.log( newObj.foo ); // "baz"
var newObj = $.extend( {}, obj1, obj2 );
console.log( obj1.foo ); // "bar"
console.log( newObj.foo ); // "baz"
※jQuery自体を拡張
$().each({})と$.each({})
//オブジェクト
$("ul li").each(function(k, v){
alert("key=" + k + ",value=" + $(v).html());
});
//配列
var array = [0, 1, 2];
$(array).each(function(k, v){
alert("key=" + k + ",value=" + v);
});
//オブジェクト
$.each($("ul li"), function(k, v){
alert("key=" + k + ",value=" + $(v).html());
});
$.each({ foo: "x", bar: "y" }, function( k, v ) {
console.log( k + " : " + v );
});
//配列
var array = [0, 1, 2];
$.each(array, function(idx, val){
alert("index=" + idx + ",value=" + val);
});
$(" :contains()")と$(" :has()")
$("li:contains('B')").css('color', 'red'); // テキスト内容
$("li:has(div)").css('color', 'red'); // タグ
$(" :first")と$(" :first-child")
$("ul li:first").css('color', 'red'); //一つのみ
$("ul li:first-child").css('color', 'red'); //複数もある
$().html()と$().text()
$('span').html(); // <p>Hello</p>
$('span').text(); // Hello
$().empty()と$().remove()
$('p').empty(); // <span><p></p></span>
$('p').remove(); // <span></span>
jQueryオブジェクト⇒DOMオブジェクト
1.DOMオブジェクト = jQueryオブジェクト[index]
例:
var $v = $("#v"); //jQueryオブジェクト
var v = $v[0]; //DOMオブジェクト
2.DOMオブジェクト = jQueryオブジェクト.get(index)
例:
var $v = $("#v"); //jQueryオブジェクト
var v = $v.get(0); //DOMオブジェクト
var buttons = $('#xxx');
for(var i = 0; i < buttons.length; i++) {
console.log(buttons[i]);
}
if (buttons.length) {
...
}
★Selectタグについて
イベントを追加
$("#id").change(function(){...});
値を取得
var selectedText = $("#id").find("option:selected").text();
var selectedValue = $("#id").val();
var selectedIndex = $("#id ").get(0).selectedIndex;
var maxIndex = $("#id option:last").attr("index");
値を設定
$("#id ").get(0).selectedIndex = 1;
$("#id ").val(2);
$("#id option[text='xxx']").attr("selected", true);
$("a#user").attr({
alt: "search engine",
href: "http://www.google.com/"
});
要素を追加・削除
$("#id").append("<option value='Value'>Text</option>");
$("#id").prepend("<option value='0'>選択してください</option>");
$("#id option:last").remove();
$("#id option[index='0']").remove();
$("#id option[value='3']").remove();
$("#id option[text='xxx']").remove();
★Checkboxの全選択・解除
<script type="text/javascript">
$(function(){
// 全選択・解除
$("#checkAll").click(function(){
$('input[name=items]:checkbox').attr("checked", this.checked );
});
$('input[name=items]:checkbox').click(function(){
var $tmp = $('input[name=items]:checkbox');
$("#checkAll").attr('checked',
$tmp.length == $tmp.filter(':checked').length);
});
// 選択済
$("#send").click(function(){
var str="";
$('input[name=items]:checkbox:checked').each(function(){
str += $(this).val() + "\r\n";
});
alert(str);
// 選択したかどうか
if (!$('input[name=items]:checkbox').is(':checked')) {
alert("選択してください。");
}
});
});
</script>
<form method="post" action="">
<input type="checkbox" id="checkAll"/>全選択<br/>
<input type="checkbox" name="items" value="01"/>項目1
<input type="checkbox" name="items" value="02"/>項目2
<input type="checkbox" name="items" value="03"/>項目3<br/>
<input type="button" id="send" value="申請"/>
</form>
★アニメーションについて
//TOPへ移動
$("a[href='#top']").click(function() {
$("html, body").animate({ scrollTop: 0 }, "slow");
return false;
});
$('p').animate({
left: '+=90px',
top: '+=150px',
opacity: 0.25
}, 900, 'linear', function() {
...
});
★フォームクリア
function clearForm(form) {
$(':input', form).each(function() {
var type = this.type;
var tag = this.tagName.toLowerCase();
if (type == 'text' || type == 'password' || tag == 'textarea') {
this.value = "";
}
else if (type == 'checkbox' || type == 'radio') {
this.checked = false;
}
else if (tag == 'select') {
this.selectedIndex = -1;
}
});
};
★selectの内容を動的に変わる
$("select#job").change(function(){
$.getJSON("xxx.php", {id: $(this).val(), ajax: 'true'}, function(j){
var options = '';
for (var i = 0; i < j.length; i++) {
options +=
'<option value="'
+ j[i].optionValue + '">'
+ j[i].optionDisplay + '</option>';
}
$("select#person").html(options);
});
});
★スクリーンの真ん中に表示
jQuery.fn.center = function () {
return this.each(function(){
$(this).css({
position:'absolute',
top, ( $(window).height() - this.height() ) / 2
+ $(window).scrollTop() + 'px',
left, ( $(window).width() - this.width() ) / 2
+ $(window).scrollLeft() + 'px'
});
});
}
$(element).center();
★外部リンクの内容をロード
$("#content").load("xxx.html", function(response, status, xhr) {
if(status == "error") {
$("#content").html("Error occured: " + xhr.status + " " + xhr.statusText);
}
});
★JavaのString.formatメソッドをまねる
var format = function(){
if(arguments.length == 0){ return ""; }
var fmt = arguments[0];
for (var i = 1; i < arguments.length; i++) {
var reg = new RegExp("\\{" + (i - 1) + "\\}", "g");
fmt = fmt.replace(reg, arguments[i]);
}
return fmt;
};