how to toggle attr() in jquery
I have a simple add attribute function:
$(".list-toggle").click(function() {
$(".list-sort").attr('colspan', 6);
});
제 질문은 어떻게 하면 이걸 토글로 바꿀 수 있을까요?colspan="6"
다음 클릭 시 요소에서 제거됩니까?
If you're feeling fancy:
$('.list-sort').attr('colspan', function(index, attr){
return attr == 6 ? null : 6;
});
ES6 Syntax (2021):
$('.list-sort').attr('colspan', (_, attr) => attr == 6 ? null : 6));
$('.list-toggle').click(function() {
var $listSort = $('.list-sort');
if ($listSort.attr('colspan')) {
$listSort.removeAttr('colspan');
} else {
$listSort.attr('colspan', 6);
}
});
Here's a working fiddle example.
See the answer by @RienNeVaPlus below for a more elegant solution.
For readonly/disabled and other attributes with true/false values
$(':submit').attr('disabled', function(_, attr){ return !attr});
I know this is old and answered but I recently had to implement this and decided to make 2 simple jQuery plugins that might help for those interested
usage:
// 1
$('.container').toggleAttr('aria-hidden', "true");
// 2
$('.container').toggleAttrVal('aria-hidden', "true", "false");
1 - Toggles the entire attribute regardless if the original value doesn't match the one you provided.
2 - Toggles the value of the attribute between the 2 provided values.
// jquery toggle whole attribute
$.fn.toggleAttr = function(attr, val) {
var test = $(this).attr(attr);
if ( test ) {
// if attrib exists with ANY value, still remove it
$(this).removeAttr(attr);
} else {
$(this).attr(attr, val);
}
return this;
};
// jquery toggle just the attribute value
$.fn.toggleAttrVal = function(attr, val1, val2) {
var test = $(this).attr(attr);
if ( test === val1) {
$(this).attr(attr, val2);
return this;
}
if ( test === val2) {
$(this).attr(attr, val1);
return this;
}
// default to val1 if neither
$(this).attr(attr, val1);
return this;
};
This is how you would use it in the original example:
$(".list-toggle").click(function() {
$(".list-sort").toggleAttr('colspan', 6);
});
This would be a good place to use a closure:
(function() {
var toggled = false;
$(".list-toggle").click(function() {
toggled = !toggled;
$(".list-sort").attr("colspan", toggled ? 6 : null);
});
})();
그toggled
variable은 정의된 스코프 내부에만 존재하며 한 번의 클릭 이벤트에서 다음 이벤트로 토글의 상태를 저장하는 데 사용할 수 있습니다.
$(".list-toggle").click(function() {
$(this).hasAttr('colspan')
? $(this).removeAttr('colspan')
: $(this).attr('colspan', 6);
});
$(".list-toggle").click(function() {
$(this).attr('colspan')
? $(this).removeAttr('colspan')
: $(this).attr('colspan', 6);
});
This answer is counting that the second parameter is useless when calling removeAttr! (as it was when this answer was posted) Do not use this otherwise!
Can't beat RienNeVaPlus's clean answer, but it does the job as well, it's basically a more compressed way to do the ternary operation:
$('.list-sort')[$('.list-sort').hasAttr('colspan') ?
'removeAttr' : 'attr']('colspan', 6);
an extra variable can be used in these cases, when you need to use the reference more than once:
var $listSort = $('.list-sort');
$listSort[$listSort.hasAttr('colspan') ? 'removeAttr' : 'attr']('colspan', 6);
ReferenceURL : https://stackoverflow.com/questions/18665031/how-to-toggle-attr-in-jquery
'sourcecode' 카테고리의 다른 글
변수의 대문자 첫번째 문자 (0) | 2023.10.31 |
---|---|
심포니 CSRF and Ajax (0) | 2023.10.31 |
콘솔에서 프로그램이 실행되는지 확인하는 방법은 무엇입니까? (0) | 2023.10.26 |
mysql 쿼리에서 일련 번호 생성 (0) | 2023.10.26 |
Oracle to Excel - PL/SQL 내보내기 절차 (0) | 2023.10.26 |