我需要完成一些非常简单的事情,到目前为止,我只能做到一半。
我有一个链接<a href="#" class="favorites">Favorite</a>
,因为您可以看到它没有 title 属性。
加载页面时,脚本会添加此标题属性:
<a href="#" class="favorites" title="Add to Favorites">Favorites</a>
单击时,将切换选中类,然后更改标题属性,因此最终结果如下:
<a href="#" class="favorites checked" title="Item added to Favorites">Favorites</a>
我有这段代码但是虽然它更改了新代码的title属性,但再次点击时title属性不会被交换,这就是我需要的:
$('.favorites').attr('title','Add to Favorites').click(function(){
$(this).toggleClass('checked').attr('title','Added to Favorites');
});
我可以在点击时“切换”属性吗?
我创建了此DEMO来显示此问题。
提前致谢。
答案 0 :(得分:6)
试试这个
$('.favorites').attr('title', 'Add to Favorites').click(function() {
$(this).toggleClass('checked');
var title = 'Add to Favorites' ;
if( $(this).hasClass('checked')){
title = 'Added to Favorites';
}
$(this).attr('title', title);
});
答案 1 :(得分:1)
你可以在is / else里面做或者只使用三元运算符
//Toggle attribute
$('.favorites').attr('title', 'Add to Favorites').click(function() {
$(this)
.toggleClass('checked')
.attr('title', $(this).hasClass('checked') ? "Item added to Favorites":'Added to Favorites');
});
最终与
相同$('.favorites').attr('title', 'Add to Favorites').click(function() {
$(this).toggleClass('checked');
if($(this).hasClass('checked')){
$(this).attr('title',"Item added to Favorites");
}else{
$(this).attr('title','Added to Favorites');
}
});
答案 2 :(得分:1)
使用data-
属性存储备用标题,然后在每次点击时使用title
属性切换。 jQuery将使用.data()
方法自动检索data-
属性中的任何内容。这样做的好处是非常灵活 - 任何.favorites
链接都可以使用这一个事件处理程序交换任何标题文本。
<a href="#" class="favorites" data-title2="Added to Favorites" title="Add to Favorites">Favorites</a>
JS:
$('.favorites').click(function() {
var $this = $(this),
t1 = $this.attr('title'),
t2 = $this.data('title2');
$this.toggleClass('checked').attr('title',t2).data('title2',t1);
});
http://jsfiddle.net/mblase75/Na2pE/
或者,如果您希望它更灵活,请先添加一些代码来检测data-title2
是否存在:
$('.favorites').click(function() {
var $this = $(this),
t1 = $this.attr('title'),
t2 = $this.data('title2');
$this.toggleClass('checked');
if (t2) {
$this.attr('title', t2).data('title2', t1);
};
});
答案 3 :(得分:1)
我知道我迟到了,但我写了一个小插件来处理切换属性
(function($) {
var methods = {
init: function(options){
var defaults = {
propName: '',
toggleTo: '',
toggleFrom: ''
}
return this.each(function() {
var $this = $(this);
var settings = $.extend({}, defaults, options);
if($this.data('toggled') == 'false' || !$this.data('toggled')){
$this.data('toggled', 'true');
$this.prop(settings.propName, settings.toggleTo);
}else{
$this.data('toggled', 'false');
$this.prop(settings.propName, settings.toggleFrom);
}
});
}
}
$.fn.toggleProperty = function( method ) {
if (methods[method]) {
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if (typeof method === 'object' || !method) {
return methods.init.apply(this, arguments);
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.toggleProperty' );
}
};
})(jQuery);
只需将其置于事件调用中即可。
$('element').click(function(){
$(this).toggleProperty({
propName: 'title',
toggleTo: 'Added From Favorites',
toggleFrom: $(this).prop('title')
});
});
此外,toggleFrom
属性允许您传递初始标题或要在其间来回切换的新标题。