jQuery 플러그인이 인라인 스타일 ( display:block
)을 적용하고 있습니다. 게으른 느낌으로로 대체하고 싶습니다 display:none
.
가장 좋은 방법은 무엇입니까?
답변
업데이트 : 다음 솔루션이 작동하는 동안 훨씬 쉬운 방법이 있습니다. 아래를 참조하십시오.
여기에 내가 생각해 낸 것이 있으며, 이것이 당신이나 다른 사람에게 도움이되기를 바랍니다.
$('#element').attr('style', function(i, style)
{
return style && style.replace(/display[^;]+;?/g, '');
});
인라인 스타일이 제거됩니다.
이것이 당신이 원하는 것이 확실하지 않습니다. 이미 지적했듯이 쉽게 재정의하고 싶었습니다 $('#element').css('display', 'inline')
.
내가 찾고있는 것은 인라인 스타일을 완전히 제거하는 솔루션이었습니다. 인라인 CSS 값을 임시로 설정해야하지만 나중에 제거하려는 플러그인에 이것이 필요합니다. 스타일 시트가 제어권을 되찾고 싶습니다. 원래 값을 모두 저장 한 다음 다시 인라인으로 넣어서 할 수 있지만이 솔루션은 훨씬 더 깨끗합니다.
다음은 플러그인 형식입니다.
(function($)
{
$.fn.removeStyle = function(style)
{
var search = new RegExp(style + '[^;]+;?', 'g');
return this.each(function()
{
$(this).attr('style', function(i, style)
{
return style && style.replace(search, '');
});
});
};
}(jQuery));
스크립트 전에 페이지에이 플러그인을 포함 시키면
$('#element').removeStyle('display');
그 트릭을해야합니다.
업데이트 : 이제이 모든 것이 쓸데없는 것을 깨달았습니다. 간단히 공백으로 설정할 수 있습니다.
$('#element').css('display', '');
자동으로 제거됩니다.
문서 에서 인용 한 내용은 다음과 같습니다 .
스타일 속성 값을 빈 문자열로 설정하면 (예 :
$('#mydiv').css('color', '')
HTML 스타일 속성, jQuery의.css()
메소드 또는 스타일 속성의 직접 DOM 조작을 통해) 이미 적용된 요소에서 해당 속성을 제거합니다 . 그러나 스타일 시트 또는<style>
요소 에서 CSS 규칙으로 적용된 스타일은 제거하지 않습니다 .
jQuery가 여기서 마술을하고 있다고 생각하지 않습니다. 객체가 이것을 기본적으로 수행 하는 것 같습니다style
.
답변
.removeAttr("style")
전체 스타일 태그를 제거하려면 …
.attr("style")
값을 테스트하고 인라인 스타일이 있는지 확인하십시오 …
.attr("style",newValue)
다른 것으로 설정
답변
jQuery로 생성 된 인라인 스타일을 제거하는 가장 쉬운 방법은 다음과 같습니다.
$(this).attr("style", "");
인라인 코드가 사라지고 객체가 CSS 파일에 미리 정의 된 스타일을 적용해야합니다.
나를 위해 일했다!
답변
jQuery의 css
메소드를 사용하여 스타일을 설정할 수 있습니다 .
$('something:visible').css('display', 'none');
답변
다음과 같이 jquery 플러그인을 만들 수 있습니다.
jQuery.fn.removeInlineCss = (function(){
var rootStyle = document.documentElement.style;
var remover =
rootStyle.removeProperty // modern browser
|| rootStyle.removeAttribute // old browser (ie 6-8)
return function removeInlineCss(properties){
if(properties == null)
return this.removeAttr('style');
proporties = properties.split(/\s+/);
return this.each(function(){
for(var i = 0 ; i < proporties.length ; i++)
remover.call(this.style, proporties[i]);
});
};
})();
용법
$(".foo").removeInlineCss(); //remove all inline styles
$(".foo").removeInlineCss("display"); //remove one inline style
$(".foo").removeInlineCss("color font-size font-weight"); //remove several inline styles
답변
게으른 방법 (미래의 디자이너가 당신의 이름을 저주하고 수면 중에 살해 할 것입니다) :
#myelement
{
display: none !important;
}
면책 조항 : 나는이 접근법을 옹호하지는 않지만 확실히 게으른 방법입니다.
답변
$('div[style*=block]').removeAttr('style');