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;

};