jQuery로 CSS 속성의 숫자 부분을 얻는 방법?


158

CSS 속성을 기반으로 숫자 계산을 수행해야합니다. 그러나 이것을 사용하여 정보를 얻을 때 :

$(this).css('marginBottom')

'10px'값을 반환합니다. 단지 값의 숫자 부분을 얻기에 트릭은인지 여부에 상관없이이 없습니다 px또는 %또는 em또는 무엇 이건?

답변:


163

이것은 문자열에서 숫자가 아닌, 점이 아닌, 빼기 부호를 모두 정리합니다.

$(this).css('marginBottom').replace(/[^-\d\.]/g, '');

음수 값으로 업데이트


4
음수를 다루지 않으면 좋습니다. 나는 정규 표현식 전문가가 아니므로 더 나은 샘플을 제공 할 수 없습니다 :)
gary

39
부동 소수점 숫자에 허용되는 모든 문자 를 처리 하고 문자열 대신 숫자 를 반환하는 parseFloat 사용을 고려 하십시오 ( maximelebreton의 답변 참조) .
Oliver

6
질문에 올바르게 답변하지 않기 때문에 허용되는 답변이 아니어야합니다. parseFloat / parseInt 솔루션이 더 좋습니다. 질문은 숫자 계산 과 관련하여 묻습니다 . 이 답변은 문자열을 반환합니다. 즉, "20"+ 20 = "2020"은 관련된 사람에게는 좋지 않습니다.
mastaBlasta

@zakovyrya 중고 RegExp/[^-\d\.]/g
Alexander

1
캐럿이있는 @Alexander 대괄호는 다음을 의미하지 않습니다. [^ <여기에 넣은 것>]. 이 정규식에서 빼기 기호, 숫자 또는 점이 아닌 기호와 일치합니다. 본질적으로 숫자의 일부가 될 수없는 모든 것을 삭제합니다
zakovyrya

284
parseInt($(this).css('marginBottom'), 10);

parseInt 단위를 자동으로 무시합니다.

예를 들면 다음과 같습니다.

var marginBottom = "10px";
marginBottom = parseInt(marginBottom, 10);
alert(marginBottom); // alerts: 10

1
이것은 내가 우연히 발견 한 모든 경우에 매우 잘 작동하는 것으로 보이며 정규 표현식 솔루션보다 훨씬 더 읽기 쉽습니다.
Markus Amalthea Magnuson

3
이 솔루션을 사용하는 경우 parseInt에 기수 (10)를 추가 할 수 있습니다.
asawilliams

47
maximelebreton의 답변 에서와 같이 정수가 아닌 값을받는 경우를 설명하기 위해 대신 parseFloat 을 사용할 수 있습니다 . parseInt
Oliver

3
실제로 parseInt는 ", 10"기수 매개 변수가 필요하지 않습니다. 10이 기본값이기 때문입니다. 적은 매개 변수 = 가독성 향상, 코드 단축, 버그 감소.
포인터 널

2
숫자를 8 진수로 해석 할 수없는 경우 10은 parseInt의 기본값입니다 (예 : '0700'은 700이 아니라 448로 구문 분석되며 이는 아마도 원하는 것입니다).
Robert C. Barth

122

replace 메소드를 사용하면 CSS 값은 숫자가 아닌 문자열입니다.

이 방법은 더 깨끗하고 단순하며 숫자를 반환합니다.

parseFloat($(this).css('marginBottom'));

2
OP가 정수가 아닌 단위 ( %, em)를 요구하기 때문에 이것이 최상의 솔루션입니다
Andre Figueiredo

14
parseFloat($(this).css('marginBottom'))

marginBottom이 em에 정의되어 있어도 위의 parseFloat 내부의 값은 계산 된 CSS 속성이므로 px로 표시됩니다.


3
parseFloat 에는 하나의 인수 만 있습니다. 여기에 제공 한 기수 (10)는 무시됩니다. 따라서 더 정답은 maximelebreton 's 입니다.
Oliver

parseFloat ($ (this) .css ( 'marginBottom'), 10)
이어야합니다

9
$(this).css('marginBottom').replace('px','')

2
그것은 'px'케이스 만 처리합니다. 따라서 나머지 '접미사'각각에 대해 별도의 교체를 수행해야한다고 생각합니다.
Grzegorz Oledzki

3
다른 접미사는 픽셀이 아니므로 예상 px하지만 주어진 경우 em변환해야합니다.
Ariel

그것이 제가 생각했던 것입니다-이것에 대한 라이브러리 루틴이 있습니까? 내가 px를 기대하는 것은 꽤 합리적인 조건이라고 생각하지만 견고성을 위해 우리의 옵션은 무엇입니까? (그냥 생각 만하세요-값을 제어하기 때문에 너무 신경 쓰지 않을 것입니다)
lol

5

간단한 jQuery 플러그인을 사용하여 단일 CSS 속성의 숫자 값을 반환합니다.

parseFloatjQuery의 기본 css메소드가 반환 한 값에 적용됩니다 .

플러그인 정의 :

$.fn.cssNum = function(){
  return parseFloat($.fn.css.apply(this,arguments));
}

용법:

var element = $('.selector-class');
var numericWidth = element.cssNum('width') * 10 + 'px';
element.css('width', numericWidth);

5

margin-bottom 속성이 20px / 20 % / 20em으로 설정되어 있다고 가정 해 봅시다. 값을 숫자로 얻으려면 두 가지 옵션이 있습니다.

옵션 1:

parseInt($('#some_DOM_element_ID').css('margin-bottom'), 10);

parseInt () 함수는 문자열을 구문 분석하고 정수를 반환합니다. 수행중인 작업을 모르는 경우 위 기능에서 찾은 10 ( "기수")을 변경하지 마십시오.

예제 출력 은 %에 대해 20 (여백 아래에 px로 설정된 경우)이며 em은 현재 상위 요소 / 글꼴 크기를 기준으로 상대 숫자를 출력합니다.

옵션 2 (개인적으로이 옵션을 선호합니다)

parseFloat($('#some_DOM_element_ID').css('margin-bottom'));

예제 출력 은 %에 대해 20 (여백 아래에 px로 설정된 경우)이며 em은 현재 상위 요소 / 글꼴 크기를 기준으로 상대 숫자를 출력합니다.

parseFloat () 함수는 문자열을 구문 분석하고 부동 소수점 숫자를 리턴합니다.

parseFloat () 함수는 지정된 문자열의 첫 문자가 숫자인지 판별합니다. 그렇다면 숫자 끝에 도달 할 때까지 문자열을 구문 분석하고 숫자를 문자열이 아닌 숫자로 반환합니다.

옵션 2의 장점은 10 진수를 반환하면 (예 : 20.32322px) 소수점 뒤에 값을 반환합니다. 예를 들어 margin-bottom이 em 또는 %로 설정된 경우와 같이 특정 숫자를 반환해야하는 경우 유용합니다.


4

parseint소수점 이하 자릿수를 자릅니다 (예 : 1.5emgives 1).

replace정규식 으로 함수를 사용해보십시오.

$this.css('marginBottom').replace(/([\d.]+)(px|pt|em|%)/,'$1');

4

Id :

Math.abs(parseFloat($(this).css("property")));

일반적인 해결책이 아닙니다. 대부분의 경우, 나는 margin부정적이거나 긍정적 이라는 것을 알고 싶습니다 !
Andre Figueiredo

3

단위없이 요소 너비를 얻는 가장 간단한 방법은 다음과 같습니다.

target.width()

출처 : https://api.jquery.com/width/#width2


너비와 높이에 좋습니다. $ (selector) .width () 및 $ (selector) .height ()는 실제로 숫자입니다. 여백, 패딩과 같은 다른 CSS 소품에는 유용하지 않습니다.
eon

3

이 매우 간단한 jQuery 플러그인을 구현할 수 있습니다 .

플러그인 정의 :

(function($) {
   $.fn.cssValue = function(p) {
      var result;
      return isNaN(result = parseFloat(this.css(p))) ? 0 : result;
   };
})(jQuery);

NaN이전 IE 버전에서 발생할 수있는 값에 저항력 이 있습니다 (0 대신 됩니다)

용법:

$(this).cssValue('marginBottom');

즐겨! :)


1
이것은 좋은 생각이지만 필요 이상으로 알려지지 않은 비용의 함수를 호출하는 것과 같은 부작용에주의해야합니다. var result; return isNaN(result = parseFloat(this.css(p))) ? 0 : result;
Nicole

2

허용 된 답변을 개선하려면 다음을 사용하십시오.

Number($(this).css('marginBottom').replace(/[^-\d\.]/g, ''));

2

"px"전용 인 경우 다음을 사용할 수도 있습니다.

$(this).css('marginBottom').slice(0, -2);

0

소수점을 유지하면서 단위를 제거해야합니다.

var regExp = new RegExp("[a-z][A-Z]","g");
parseFloat($(this).css("property").replace(regExp, ""));

-1

사용하다

$(this).cssUnit('marginBottom');

배열을 반환합니다. 첫 번째 인덱스는 마진 맨 아래 값 ( 20px 의 경우 예 20) 을 반환하고 두 번째 인덱스는 마진 맨 아래 단위 ( 20px의 예 px) 를 반환


1
cssUnit은 실제로 jQuery가 아닌 jQueryUI의 일부입니다.
cvkline
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.