使用jquery在条件下定义javascript变量

时间:2013-12-20 15:13:31

标签: javascript jquery

就像标题所说,我想在某些条件下填写变量

我以为我可以这样做而不是:

var content = $(function() {
    if ($('#content').length) {
        return  $('#content');
    }

    if ($('#content_no_decoration').length) {
        return  $('#contenu_no_decoration');
    }

    if ($('#full_content').length) {
        return  $('#full_content');
    }

    if ($('#full_content_no_decoration').length) {
        return  $('#full_content_no_decoration');
    }
});

所以我认为javascript变量'content'将是表示dom中元素的jquery对象之一。但似乎'内容'就是这个功能。

我猜你想象我想做什么.JQuery的语法是什么?

谢谢

8 个答案:

答案 0 :(得分:3)

$(function() { })是DOMReady事件的简短代码。您需要显式定义一个函数,然后将返回值赋给变量。

例如:

function getObj() 
{
    if($('#content').length) 
    {
        return  $('#content');
    }

    if($('#content_no_decoration').length) 
    {
        return  $('#contenu_no_decoration');
    }

    if($('#full_content').length) 
    {
        return  $('#full_content');
    }

    if($('#full_content_no_decoration').length) 
    {
        return  $('#full_content_no_decoration');
    }
}

然后您可以将值指定为:

var content = getObj();

虽然DOM已准备好,但您需要调用赋值,否则选择器将不会按预期触发。例如:

$(function() {  
    var content = getObj();
});

答案 1 :(得分:1)

为什么你不这样做?

function thatsAGoodName() {
    if ($('#content').length) {
        return  $('#content');
    }

    if ($('#content_no_decoration').length) {
        return  $('#contenu_no_decoration');
    }

    if ($('#full_content').length) {
        return  $('#full_content');
    }

    if ($('#full_content_no_decoration').length) {
        return  $('#full_content_no_decoration');
    }
}
var content = thatsAGoodName();

答案 2 :(得分:1)

功能

$(function() {
    // DOM safe to use do stuff
})

是文档就绪事件的简写。这告诉你编码器dom可以安全使用。

你不会真的从这个事件中返回任何东西。

答案 3 :(得分:1)

您只是声明该函数,因此content包含指向该函数的指针。

执行它,你很好:

var content = function() {
    if ($('#content').length) {
        return  $('#content');
    }

    if ($('#content_no_decoration').length) {
        return  $('#contenu_no_decoration');
    }

    if ($('#full_content').length) {
        return  $('#full_content');
    }

    if ($('#full_content_no_decoration').length) {
        return  $('#full_content_no_decoration');
    }
}();

但你真的不需要这里的功能。如果脚本标记位于页面底部(在结束</body> - 标记之前),或者分配在加载处理程序中,则可以使用:

var content = $('#content').length 
               ? $('#content') 
               : $('#content_no_decoration').length 
                 ? $('#content_no_decoration')
                 : $('#full_content').length 
                   ? $('#full_content')
                   : $('#full_content_no_decoration').length 
                     ? $('#full_content_no_decoration')
                     : undefined;

或者使用jQuery来保持优势并保持简短:

var content = 
  $('#content,#content_no_decoration,#full_content,#full_content_no_decoration')
   .get(0);
// if none of the elements exist, content will be undefined, otherwise
// it will contain [a JQuery Object of] the first existing element

答案 4 :(得分:0)

content是一个对象,因为您在此处将其设置为对象:

var content = $(function() {

你可能想要的是:

var content;

if ($('#content').length) {
    content = $('#content');
}

if ($('#content_no_decoration').length) {
    content = $('#contenu_no_decoration'); // Is #contenu a typo???
}

if ($('#full_content').length) {
    content = $('#full_content');
}

if ($('#full_content_no_decoration').length) {
    content = $('#full_content_no_decoration');
}

请注意,现在这将引用一个元素。如果您需要实际内容,则需要使用html()val()之类的内容将其删除。

答案 5 :(得分:0)

稍微重新排列它应该有效:

$(function () {
    var content = (function() {
        var regularContent = $('#content');
        if (regularContent.length !== 0) {
            return regularContent;
        }

        var contentNoDecoration = $('#content_no_decoration');
        if (contentNoDecoration.length !== 0) {
            return contentNoDecoration;
        }

        var fullContent = $('#full_content');
        if (fullContent.length !== 0) {
            return fullContent;
        }

        var fullContentNoDecoration = $('#full_content_no_decoration');
        if (fullContentNoDecoration.length !== 0) {
            return fullContentNoDecoration;
        }
    }());
});

这段代码基本上是说一旦DOM准备就绪($(function () { ... });部分),运行这个匿名函数((function () { ... }());部分)并将其返回值赋给content

编辑:此外,您通过两次运行每个选择器而不是仅运行一次来​​降低效率。

答案 6 :(得分:0)

你正在使用jQuery ready事件的简写($(function() {。我相信你想要的是一个自我调用函数:

// remove the call to jQuery 
var content = (function() {
   if ($('#content').length) {
        return  $('#content');
    }
   // ... more
})(); // invoke the function, which should return a jQuery object

您可能需要将其包装在document.ready中,具体取决于脚本的执行位置。

答案 7 :(得分:-1)

内容是函数,但您可以使用该函数。像:

var result = content();

编辑:

删除$()周围的var content = $({/* code */}),它可以正常工作。