0

私は以下を機能させようとしています:

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

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

このようにして、CSSセッターが1つだけで済むことを望んでいました。ただし、Firebug は常に$marPad[0]のような CSS セレクターを作成できないと言っています。プロパティ id の後に、常に missing:が返されます。

誰かが私が間違っていることを教えてもらえますか? また、固定の CSS セレクターの代わりに変数を使用することも可能でしょうか?

手伝ってくれてありがとう!

4

4 に答える 4

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);
于 2012-04-11T21:45:46.387 に答える
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 not i amと言われているので、次のようにする必要があります。

obj = {};
obj[$marPad[0]] = "100px"; 
obj[$marPad[1]] = "100px";
$('#toBeSet').css(obj);
于 2012-04-11T21:52:32.380 に答える
1

オブジェクト リテラルでは変数を名前として使用できません。オブジェクトを作成し、プロパティを追加します。

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

$("#toBeSet").css(o)  
于 2012-04-11T21:46:41.960 に答える
1

試す:

$("#toBeSet").css($marPad[0], "100px").css($marPad[1], "100px");
于 2012-04-11T21:45:29.210 に答える