2012-04-11 2 views
0

는 내가 일을 다음 얻으려고 : 나는 단지 하나의 CSS 세터에 의해 얻을 기대했다Jquery에서 CSS 속성을 설정할 때 변수를 사용하는 방법은 무엇입니까?

var $marPad = $('#wrapper').attr('id') == "overthrow" ? 
     ["margin-top", "margin-bottom"] : ["padding-top", "padding-bottom"]; 

$("#toBeSet").css({ 
    $marPad[0] : "100px", 
    $marPad[1] : "100px" 
    }) 

이 방법. 그러나 방화범은 항상 내가 $ marPad [0]과 같은 CSS 선택기를 만들 수 없다고 알려줍니다. 항상 이 누락되었습니다. 속성 ID 이후.

누군가 내가 뭘 잘못하고 있고 고정 CSS 선택기 대신 변수를 사용할 수 있다면 어떨까요?

도움 주셔서 감사합니다.

+1

이 날 수정 :. 나는,이 같은 뭔가를해야한다고 말했다 오전 없습니다 false입니다. ID로 요소를 선택하고 나인지 확인하기 때문에 D는 그렇지 않습니다. 그래서'$ marPad'는 항상''padding-top '',''padding-bottom '''과 같습니다. – Jasper

+0

@ 재스퍼 - 정확합니다. 방금 질문을했습니다. 사용자 정의 jqm-data 속성이 제대로 작동하는지 확인합니다. 그래도 지적을위한 thx! – frequent

답변

5

먼저 해당 객체를 생성 그것에 속성을 추가 할 필요가있다.

var obj = {}; 

obj[$marPad[0]] = '100px'; 
obj[$marPad[1]] = '100px'; 

$("#toBeSet").css(obj); 

그 첫번째 장소에있는 조건문의 일부 수 있도록하는 것입니다 아마도 더 나은 ...

var $marPad = $('#wrapper').attr('id') == "overthrow" ? 
     {marginTop:'100px', marginBottom: '100px'} : {paddingTop:'100px', paddingBottom:'100px'}; 

$("#toBeSet").css($marPad); 
+1

둘 다 좋습니다. 두 번째 솔루션은 더 좋아 보인다. 내 원래 코드는 좀 더 복잡하기 때문에 첫 번째 버전 – frequent

1

시도 :

$("#toBeSet").css($marPad[0], "100px").css($marPad[1], "100px"); 
+0

이 작동합니다. CSS 규칙에 둘 이상의 요소를 어떻게 추가 할 수 있습니까? – frequent

+0

이 질문은 실제 문제와 관련이 있습니다. 구문이 예상대로 작동하지 않는 이유는 무엇입니까? – nickf

+0

나는 그것이 예상대로 작동한다고 생각한다. 다른 대답에는 위대한 explenation이있다. - 키를 문자열로 묶어야한다. (따옴표 없이도 가능하다. 이것은 JSON 객체와 다르다.) – hamczu

1

당신은 객체 리터럴의 이름과 같은 변수를 사용할 수 없습니다. 객체를 생성하고 여기에 속성을 추가

var o = {}; 
o[$marPad[0]] = "100px"; 
o[$marPad[1]] = "100px"; 

$("#toBeSet").css(o) 
+0

으로 기울여 보았습니다. 이렇게하는 것이 깔끔한 방법입니다! 감사! – frequent

2

객체 리터럴 정의의 key 부분은 평가되지 않습니다. 즉,이 같은 일을 할 수 없습니다

x = { 
    1 + 1: 'foo' 
}; 

을 항상 따옴표를 필요로하지 않더라도, 왼쪽은 문자열 식별자로 처리됩니다.

foo = 'bar'; 
x = { 
    foo: 'my value' 
} 
x.bar === undefined; 
x.foo === 'my value'; 

식을 평가하는 유일한 방법은 대괄호 표기법을 사용하는 것입니다 : 직접 질문에 대답 그래서

foo = 'bar'; 
x = {}; // an empty object 
x[foo] = 'my value'; // <-- foo is evaluated, returns the string value 'bar' 

x.bar === 'my value'; 
x.foo === undefined; 

// and to clarify: 
x['foo'] === undefined; 
x[foo] === 'my value' 

을, @am로 그 다음 변수는 평가되지 않도록 다음과 ATTR ('ID') == "전복"`는 항상 수익을 내가 ('# 래퍼')`$ 틀렸다하지만 경우

obj = {}; 
obj[$marPad[0]] = "100px"; 
obj[$marPad[1]] = "100px"; 
$('#toBeSet').css(obj); 
+0

+1 좋은 철저한 설명. –

+0

+1 나 에게서도! – frequent

관련 문제