如何将字符串转换为“选择器”?

时间:2014-08-01 02:46:04

标签: javascript jquery css string switch-statement

是否可以将字符串转换为选择器?

我知道可以将它变成DOM选择器:

EX:

var a = '.string';
var b = $( a );

通过这种方式,它将选择具有.string类的元素,但如果在jQuery插件中我需要一个字符串来改变,然后选择一个选项或更改CSS规则呢?

在我的插件中,我有两个元素,第一个位于左侧,第二个位于右侧。我需要根据它们的宽度来改变边距。因为我觉得如果有可能用dinamically创建选择器(根据他们的位置),我觉得链接加倍。有了这个插件,我可以做我想做的事情,但选择器将作为字符串返回。

EX:

$.fn.myFunction( options ) {
    var cfg = $.extend({
        left: {
            selector : '.selector',
            width    : 300
        },
        right: {
            selector : undefined,
            width    : 500
        }
    }, options ),
        $wrapper = $( this ),
        left     = cfg.left,
        right    = cfg.right;

    function isDefined( e ) {
        if ( e == undefined ) {
            //do nothing
        } else {
          var align,
              $element = $( e ),
              position: {
                  right: $element.css( 'right' )
              };

        switch( position.right ) {
            case 'auto':
                align = 'left';
                break;
            case '0':
                align = 'right';
                break;
        }

        var def = 'cfg.' + align + '.width';
        var mar = 'margin-' + align;

        $element.css({
            mar: -def,
            width: def
        });
    }

    isDefined( left );
    isDefined( right );

    return this;
};

正如您所读,我需要 def 变量 cfg.left.width cfg.right.width 才能选择相对选项。虽然它总会返回一个字符串。如何使该字符串有效?

另外,我需要动态设置边距: mar = 'margin-' + align将返回例如"margin-left",然后在css方法中使用它?

1 个答案:

答案 0 :(得分:1)

您应该使用括号表示法,而不是字符串

var def = cfg[align].width

会得到你想要的东西