先日jQuery 1.6ãŒãƒªãƒªãƒ¼ã‚¹ã•れã¾ã—ãŸãŒã€æ¡ˆã®å®š.attr()関連ã§è­°è«–ã«ãªã£ãŸã‚ˆã†ã§ã€ä¸€é€±é–“後ã«å¾Œæ–¹äº’æ›ã‚’ä¿ã¤æ›´æ–°ãŒè¡Œã‚れã¾ã—ãŸã€‚

1.6ã®æ›´æ–°å†…容ã¯å…ˆæ—¥ã®è¨˜äº‹ã‚’ã”覧頂ã‘れã°ã€‚

更新内容

jQuery 1.6ã§ã¯.prop()メソッドã®è¿½åŠ ã¨.attr()メソッドã®å¤‰æ›´ãŒã‚りã€ã“れãŒã€Œå±žæ€§ã€ã¨ã€Œãƒ—ロパティã€ã®å·®ã€åŠã³é–¢ä¿‚性ã«ã¤ã„ã¦ã®è­°è«–を引ãèµ·ã“ã—ã¾ã—ãŸã€‚çµæžœã¨ã—ã¦ã€1.6.1ã§ã¯å¾Œæ–¹äº’æ›ã‚’ä¿ã¤ã‚ˆã†ä¿®æ­£ã•れる事ã«ãªã‚Šã¾ã—ãŸã€‚

ã¤ã¾ã‚Š1.5.2ã‹ã‚‰ï¼ˆ1.6を飛ã°ã—ã¦ï¼‰1.6.1ã¸ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚¢ãƒƒãƒ—ã™ã‚‹éš›ã¯ã€.attr()関連ã®ã‚³ãƒ¼ãƒ‰ã¯å¤‰æ›´ãŒä¸è¦ã§ã™ã€‚

ãªãŠ.date()ã®æ–¹ã¯1.6ã®ãƒªãƒªãƒ¼ã‚¹ãƒŽãƒ¼ãƒˆã®é€šã‚Šã®å‹•作ã®ã¾ã¾ã§ã‚ã‚‹äº‹ã«æ³¨æ„ã—ã¦ãã ã•ã„。

å‰å›ž(1.6)ã§ã®.attr()ã®ä»•様

変更点ã®ã²ã¨ã¤ã«ã€.attr()ãŒå޳坆ãªå‹•作ã«ãªã£ãŸã¨ã„ã†ã‚‚ã®ãŒã‚りã¾ã—ãŸã€‚具体的ã«è¨€ã†ã¨DOMã®.getAttribute()を利用ã™ã‚‹ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚

今ã¾ã§ã‚‚利用ã¯ã—ã¦ã„ãŸã®ã§ã™ãŒã€checked属性ãªã©ã®å ´åˆã¯è‡ªå‹•çš„ã«ãƒ—ロパティをå‚ç…§ã™ã‚‹ãªã©ã€æŸ”軟性をæŒã£ã¦ã„ãŸã®ã§ã™ã€‚ãれãŒå‰å›žã®ä¿®æ­£ã§ã¯é™¤åŽ»ã•れã€ãƒ—ロパティをå‚ç…§ã™ã‚‹å ´åˆã¯æ–°ã—ã追加ã•れãŸ.prop()を使用ã›ã‚ˆã€ã¨ã®äº‹ã§ã—ãŸã€‚

例ãˆã°ã€ä»¥ä¸‹ã®ã‚³ãƒ¼ãƒ‰ã¯jQuery 1.6ã§ã¯æƒ³å®šé€šã‚Šã«å‹•ãã¾ã›ã‚“。

if ($(':checkbox').attr('checked')) {
    alert('checked!');
}

ã“ã®ã‚³ãƒ¼ãƒ‰ã§ã¯ã€æã‚‰ã.attr()ã¯å¸¸ã«ç©ºæ–‡å­—””ã‚’è¿”ã™ã§ã—ょã†ã€‚

1.6ã§.attr()を変更ã—ãŸç†ç”±

jQuery 1.6ã®Attributesモジュールã®å¤‰æ›´ã«ã‚ˆã‚Šã€å±žæ€§ã¨ãƒ—ãƒ­ãƒ‘ãƒ†ã‚£ã®æ›–昧ã•ã‚’ãªãã™äº‹ãŒã§ãã¾ã—ãŸã€‚ã—ã‹ã—ã“れã¾ã§ã®jQueryã¯å±žæ€§ã‚‚プロパティも.attr()ã ã‘ã§ãƒãƒ³ãƒ‰ãƒªãƒ³ã‚°ã—ã¦ã„ãŸã®ã§ã€å½“ç„¶ã“ã®å¤‰æ›´ã¯jQueryコミュニティを混乱ã•ã›ã‚‹çµæžœã«ãªã£ã¦ã—ã¾ã„ã¾ã—ãŸã€‚

ã¨ã¯ã„ãˆéŽåŽ»ã®.attr()メソッドã¯å¤šãã®å•題点を抱ãˆã¦ãŠã‚Šã€ä¿å®ˆã‚‚難ã—ããªã£ã¦ã„ãŸã¨ã®äº‹ã€‚実際ã€jQuery 1.6.1ã§ã¯Attributesãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®æ›´æ–°ã¨åŒæ™‚ã«å¹¾ã¤ã‹ã®ä¸å…·åˆã‚‚修正ã•れã¦ã„ã‚‹ãã†ã§ã™ã€‚

1.6.1ãŒæä¾›ã™ã‚‹å¾Œæ–¹äº’æ›æ€§

checked, selected, readonly, disabledã¨ã„ã£ãŸbooleanåž‹ã®å±žæ€§ã¯ã€1.6.1ã§ã¯1.6よりå‰ã®jQueryã¨åŒæ§˜ã«æ‰±ã‚れã¾ã™ã€‚ã¤ã¾ã‚Šä»¥ä¸‹ã®ã‚ˆã†ãªã‚³ãƒ¼ãƒ‰ã¯ç‰¹ã«å¤‰æ›´ã‚’加ãˆãªãã¦ã‚‚ã€ä»Šã¾ã§é€šã‚Šã«å‹•ãã¾ã™ã€‚(1.6ã§ã¯ã“れãŒé§„ç›®ã§ã—ãŸã€‚)

$(":checkbox").attr("checked", true);
$("option").attr("selected", true);
$("input").attr("readonly", true);
$("input").attr("disabled", true);
if ( $(":checkbox").attr("checked") ) { /* Do something */ }

.attr()ã¨.prop()ã®ä½¿ã„分ã‘

éŽåŽ»ã®.attr()を使用ã—ãŸã‚‚ã®ã¨ã€ãれãŒ.prop()ã§ã©ã†ç½®ãæ›ãˆã‚‰ã‚Œã‚‹ã¹ãã‹ã‚’ã®ä¾‹ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚

.attr() .prop()
$(window).attr… $(window).prop…
$(document).attr… $(document).prop…
$(“:checkbox”).attr(“checked”, true); $(“:checkbox”).prop(“checked”, true);
$(“option”).attr(“selected”, true); $(“option”).prop(“selected”, true);

ã¾ãšwindowオブジェクトã€documentオブジェクトã¯å±žæ€§(Attributes)ã‚’æŒãŸãªã„ã®ã§ã€ã“れã¯jQuery 1.6ã®.attr()ã§ã¯å‹•作ã—ã¾ã›ã‚“。locationã‚„readyStateãªã©ã€ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæŒã¤ãƒ—ロパティ(Property)ã¯.prop()ã‹ã€jQueryを介ã•ãªã„生ã®JavaScriptã§æ“作ã—ã¦ãã ã•ã„。ãŸã ã—å‰è¿°ã®é€šã‚Šã€ä»Šå›žã®jQuery 1.6.1ã§ã¯.prop()ã¸ã®åˆ‡ã‚Šæ›¿ãˆãŒå»¶æœŸã•れã¾ã—ãŸã®ã§ã€ç¾æ™‚点ã§ã¯ã©ã¡ã‚‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã‚‚エラーã«ã¯ãªã‚Šã¾ã›ã‚“。

ç¶šã„ã¦ä»Šã¾ã§ç‰¹åˆ¥æ‰±ã„ã ã£ãŸcheckedã‚„selectedãªã©booleanåž‹ã®å±žæ€§ã§ã™ãŒã€å¼•ãç¶šã特別扱ã„ã¨ãªã‚Šã¾ã™ã€‚属性ã¨ãƒ—ロパティã®é–“ã«ç‰¹åˆ¥ãªé–¢ä¿‚ãŒã‚ã‚‹ãŸã‚ã§ã™ã€‚属性ã¨ã¯ã€ä¸€èˆ¬ã«ä»¥ä¸‹ã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€‚

<input type="checkbox" checked="checked">

checkedã®ã‚ˆã†ãªbooleanåž‹ã®å±žæ€§ï¼ˆã¤ã¾ã‚Šon/offã®çŠ¶æ…‹ã‚’æŒã¤ã‚‚ã®ï¼‰ã¯ã€åˆæœŸå€¤(default value; 属性値をçœç•¥ã—ãŸéš›ã®ã‚‚ã®)ã‹è¨­å®šå€¤(initial value; HTMLã«è¨˜è¿°ã—ãŸã‚‚ã®)ã®ã¿ã‚’å–りã¾ã™ã€‚ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã®å ´åˆã€ç”»é¢ãŒè¡¨ç¤ºã•れãŸéš›ã«ãƒã‚§ãƒƒã‚¯ãŒä»˜ãã‹ã©ã†ã‹ã¯checked属性ã«ã‚ˆã‚Šã¾ã™ã€‚

åˆæœŸå€¤ã¨è¨­å®šå€¤ã«ã¤ã„ã¦ã€ä»¥ä¸‹ã«ä¾‹ã‚’示ã—ã¾ã™ã€‚

<ul>
  <li><input id="none" type="checkbox" /></li>
  <li><input id="mini" type="checkbox" checked /></li>
  <li><input id="full" type="checkbox" checked="checked" /></li>
</ul>
$('#none')[0].getAttribute('checked'); // null
$('#none')[0].checked;                 // false
$('#mini')[0].getAttribute('checked'); // ""
$('#mini')[0].checked;                 // true
$('#full')[0].getAttribute('checked'); // "checked"
$('#full')[0].checked;                 // true
対象 .getAttribute(‘checked’) .checked
#none null false
#mini “” (空文字列) true
#full “checked” true

プロパティã¯ã€ãƒ–ラウザーãŒç¾åœ¨ã®å€¤ã‚’æ ¼ç´ã™ã‚‹ã®ã«ä½¿ç”¨ã—ã¾ã™ã€‚一般ã«ã€ãƒ—ロパティã¯å±žæ€§ã«å映ã•れã¾ã™ï¼ˆã‚れã°ï¼‰ã€‚ã—ã‹ã—booleanåž‹ã®å±žæ€§ã®å ´åˆã€ã“ã®ç‰¹æ€§ã¯å½“ã¦ã¯ã¾ã‚Šã¾ã›ã‚“。booleanåž‹ã®ãƒ—ロパティã¯ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã®ã‚¯ãƒªãƒƒã‚¯ã‚„selectè¦ç´ ã®é¸æŠžãªã©ã€åˆ©ç”¨è€…ã®æ“作ã¨åŒæœŸã—ã¾ã™ãŒã€å±žæ€§ã¯ãã†ã§ã¯ã‚りã¾ã›ã‚“。å‰è¿°ã®ã‚ˆã†ã«ã€å±žæ€§ã¯ãƒ–ラウザーãŒè¨­å®šå€¤ã‚’æ ¼ç´ã™ã‚‹ã®ã«ä½¿ã‚れるã ã‘ã§ã™ã€‚

$(":checkbox")[0].checked = true;
// ã“れã¨åŒã˜â†’ $(":checkbox:first").prop("checked", true);

jQuery 1.6ã§ã¯ã€æ¬¡ã®ã‚³ãƒ¼ãƒ‰ã§ã¯ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã«ãƒã‚§ãƒƒã‚¯ã¯ä»˜ãã¾ã›ã‚“。何故ãªã‚‰ã“れã¯å±žæ€§ã®è¨­å®šå€¤ã‚’変更ã—ã¦ã„ã‚‹ã ã‘ã§ã€ãƒã‚§ãƒƒã‚¯çŠ¶æ…‹ã‚’å¤‰æ›´ã™ã‚‹ã«ã¯ãƒ—ロパティã¯å¤‰æ›´ã•れãªã„ã‹ã‚‰ã§ã™ã€‚

$(":checkbox").attr("checked", true);

jQueryã®é–‹ç™ºãƒãƒ¼ãƒ ã‚‚1.6をリリースã—ãŸæ™‚ã«ã¯æ—¢ã«ã€ãƒ–ラウザーãŒç”»é¢èª­ã¿è¾¼ã¿æ™‚ã«ã—ã‹ä½¿ã‚ãªã„値をæ“作ã§ããŸã¨ã“ã‚ã§ä½•も便利ãªäº‹ã¯ãªã„ã¨ã‚ã‹ã£ã¦ã„ãŸãã†ã§ã™ã€‚(何故リリースã—ãŸï¼) çµå±€jQuery 1.6.1をリリースã—ã€äº’æ›æ€§ã€åˆ©ä¾¿æ€§ã®ãŸã‚引ãç¶šã.attr()メソッドã§booleanåž‹ã®å±žæ€§å€¤ã®å–å¾—ã¨è¨­å®šã‚’行ãˆã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã—ãŸã€‚

よã使ã†booleanåž‹ã®å±žæ€§ã¨ã„ãˆã°checked, selected, disabled, readonlyã§ã™ãŒã€jQuery 1.6.1ã¯ä»–ã«ã‚‚多ãã®å±žæ€§ã‚’.attr()ã§æ“作ã™ã‚‹äº‹ãŒã§ãã¾ã™ã€‚以下ã«ãã®ä¸€è¦§ã‚’示ã—ã¾ã™ã€‚

autofocus, autoplay, async, checked,
controls, defer, disabled, hidden, loop, multiple,
open, readonly, required, scoped, selected
.prop()を使ã£ãŸæ“作を推奨ã—ã¦ã¯ã„ã¾ã™ãŒã€æ—¢å­˜ã‚³ãƒ¼ãƒ‰ã‚’変更ã—ãªãã¦ã‚‚ã€jQuery 1.6.1ã§å‹•ãã¾ã™ã€‚

å¹¾ã¤ã‹ã®å±žæ€§ã€ãƒ—ロパティã«ã¤ã„ã¦ã€ã©ã¡ã‚‰ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’使ã†ã¹ãã‹ã‚’以下ã«ã¾ã¨ã‚ã¾ã—ãŸã€‚一部ã®ãƒ—ロパティã¯ã€éŽæ¸¡æœŸçš„ãªæŽªç½®ã¨ã—ã¦.attr()ã§å‹•ãã ã‘ã§ã‚ã‚‹ç‚¹ã¯æ³¨æ„ã—ã¦ãã ã•ã„。

属性ã€ãƒ—ロパティ .attr() .prop()
accesskey ✓
align ✓
async ✓ ✓
autofocus ✓ ✓
checked ✓ ✓
class ✓
contenteditable ✓
defaultValue ✓
draggable ✓
href ✓
id ✓
label ✓
location * ✓ ✓
multiple ✓ ✓
nodeName ✓
nodeType ✓
readOnly ✓ ✓
rel ✓
selected ✓ ✓
selectedIndex ✓
src ✓
style ✓
tabindex ✓
tagName ✓
title ✓
type ✓
width ** ✓
  • window.locationã¨ã‹ ** .width()ã§ä½¿ã†ã‚‰ã—ã„

フォーム

フォーム部å“ã®å€¤ã‚’å–ã‚‹å ´åˆã¯.attr()ã§ã‚‚.prop()ã§ã‚‚ãªãã€.val()を使ã†ã‚ˆã†ã«ã—ã¾ã—ょã†ã€‚ãŸã ã—ç¾åœ¨ã¯ã€ã¾ã æ¬¡ã®ã‚³ãƒ¼ãƒ‰ã§å‹•ãã¾ã™ã€‚

$text.attr("value", "any values");

ã¾ã¨ã‚

.prop()メソッドã¯booleanåž‹ã®å±žæ€§ã¨ãƒ—ロパティã€ã‚ã‚‹ã„ã¯window.locationã¨ã„ã£ãŸHTMLã§ã¯ãªã„ãƒ—ãƒ­ãƒ‘ãƒ†ã‚£ã®æ“作ã«ä½¿ã„ã¾ã™ã€‚ãれ以外ã®HTML中ã«å­˜åœ¨ã™ã‚‹å±žæ€§ã¯ã€å¼•ãç¶šã.attr()メソッドを使用ã—ã¦ä¸‹ã•ã„。