目前有5個:
.attr():塞屬性
.prop():塞屬性
.removeAttr():移除attr,官網說 IE 6~8 移除oncick會有問題,要用removeProp
.removeProp():移除prop設定的屬性,且不能移除內鍵的屬性
.val():塞value、取value
1.6版後,attr和prop對特定的方法,回傳的不一樣,prop回傳的大部分都是布林值;attr回傳的是屬性
※.attr()、.prop()基本用法
$(function() {
$('input').prop('readonly', 'readonly');
var $prop = $('input').prop('readonly');
alert('prop=' + $prop); // true
$('input').attr('readonly', 'readonly');
var $attr = $('input').attr('readonly');
alert('attr=' + $attr); //readonly
// $('input').attr('value', 'xxx').attr('disabled', 'disabled');
// $('input').attr({value:'xxx', disabled:'disabled'});
----------
<input />
※使用兩個參數是設定,attr和prop在設定時都一樣
※使用一個參數是取值,這時attr和prop回傳結果不同,prop回傳的是boolean值
※.attr()、.prop()的function用法
$(function() {
$('p').attr('id', function(i, j) {
alert(j);
return "xxx" + i;
}).each(function () {
$('span', this).text($(this).attr('id'));
});
});
----------
<p>p1 <span></span></p>
<p>p2 <span></span></p>
<p>p3 <span></span></p>
※j取到的是id值,看第一個參數是什麼決定的
※.attr()、.prop()差異一
$(function() {
$('#b1').click(function() {
$('#ooo').attr('readonly', true);
alert($('#ooo').attr('readonly'));
});
$('#b2').click(function() {
$('#ooo').prop('readonly', true);
alert($('#ooo').prop('readonly'));
});
$('#b3').click(function() {
var $checkbox = $('input[name="xxx"]').eq(0);
alert($checkbox.attr('checked'));
alert($checkbox.prop('checked'));
});
});
----------
<input id="ooo" />
<button id="b1">B1</button>
<button id="b2">B2</button>
<br />
<input type="checkbox" name="xxx" id="c1" checked="checked"/>
<label for="c1">a</label>
<input type="checkbox" name="xxx" id="c2" />
<label for="c2">b</label>
<input type="checkbox" name="xxx" id="c3" />
<label for="c3">c</label>
<button id="b3">B3</button>
※B1回傳的是「readonly」,是屬性名稱;B2回傳的是true,是布林值
※B3用attr回傳的是「checked」,用prop回傳的是true
※.attr()、.prop()差異二
$(function() {
$('select').prop('selectedIndex', 1);
alert($('select').prop('selectedIndex'));
$('input[type="checkbox"]').prop('defaultChecked', true);
alert($('input[type="checkbox"]').prop('defaultChecked'));
});
----------
<select>
<option>A</option>
<option>B</option>
<option>C</option>
<option>D</option>
<option>E</option>
</select>
<input type="checkbox" name="xxx" />
<input type="checkbox" name="xxx" />
<input type="checkbox" name="xxx" />
※用attr和prop回傳的都是1和true,但是用prop真的有選到B,checkbox也都有勾;而attr就是個初始值而已
※官方還有說 selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, or defaultSelected 都要用prop,我這裡示範兩個而已
※總之使用prop有以下兩個的,就用prop比較好
1.屬性值是true/false
2.只增加屬性名稱,而不增加屬性值就可以的
個人經驗:
「$('xxx').attr('disabled', true);」有些瀏覽器不行,
但用「$('xxx').attr('disabled', 'disabled');」就可以;readonly也是一樣
※.removeAttr()、.removeProp()
$(function() {
$('input').removeAttr('readonly');
// $('input').removeProp('readonly');
});
----------
<input readonly="readonly"/>
※使用removeProp無效
※remove範例二
$(function() {
$('input').prop('readonly', 'readonly');
$('input').removeAttr('readonly');
// $('input').removeProp('readonly');
});
----------
<input />
※這次用jQuery的prop塞屬性,removeAttr是有用的,但removeProp還是無效
※官網有說不要用prop移除內鍵的屬性,所以無效是很正常的
※remove範例三
$(function() {
$('span').prop('xxx', 'x');
alert($('span').prop('xxx'));
$('span').removeProp('xxx');
alert($('span').prop('xxx'));
});
----------
<span>span</span>
※此時xxx不是內鍵的屬性,所以運作正常,全部改成attr也是ok的,但如果是將removeProp改成removeAttr是不行的
※兩個最好不要混用,因為很少人會去記哪些可以混用;都不混用一定可以就對了
※.val()基本用法
$(function() {
$('input').val('xxx');
alert($('input').val());
$('input').val('');
alert($('input').val());
});
----------
<input />
※取的是value,不是text
※.val()的function用法
$(function() {
$('input').change(function() {
$(this).val(function(i, v) {
return v.toUpperCase() + ' success!';
});
});
});
----------
<input />
※i是index;v就是打字的內容了
沒有留言:
張貼留言