Составной оператор if игнорируется в JQuery (Javascript) - PullRequest
0 голосов
/ 25 января 2012

Я в полном недоумении. Я собираю скрипт, который проверяет, загружены ли две таблицы стилей в головную часть темы WordPress, а затем загружает внутреннюю таблицу стилей, только если обе внешние таблицы стилей загружаются первыми. Но последний оператор if, который проверяет, «существуют» ли обе внешние таблицы стилей, выполняется так, как будто нет оператора if, обернутого вокруг него. В коде я упоминаю сайт, откуда пришла эта идея. Ниже мой код:

jQuery(document).ready(function() {
/* Place smaller widget design behind .widgettitle only on 3-column layout */
/* adapted from http://churchm.ag/dynamically-applying-stylesheets-using-jquery/ */
//templateDir is defined in functions.php and placed into this theme's head tag
var threeColExists = false;

    // check for blue stylesheet with 3-column stylesheets
    var blueExists = false;
    jQuery('link').each(function() {
        if(jQuery(this).attr('href') === 
        templateDir + '/layouts/3-column-right.css' ||
        templateDir + '/layouts/3-column-left.css' ||
        templateDir + '/layouts/3-column-right-magazine.css' ||
        templateDir + '/layouts/3-column-left-magazine.css') {
            threeColExists = true;
        }
        if(jQuery(this).attr('href') === templateDir + '/styles/blue.css') {
            blueExists = true;      
        }
    });

    // This is what is getting executed regardless of whether the two conditions below evaluate to true
    if((threeColExists === true) && (blueExists === true)) {
        jQuery('head').append('<style type="text/css"> .widgettitle { background: url(' + templateDir + '/images/widget-design-smaller-blue.png) bottom left no-repeat #FFFFFF; } </style>');   
    }
});

1 Ответ

2 голосов
/ 25 января 2012

Вы не можете сделать сложное сравнение так, как вы это делаете.Это должно быть так, когда вы прописываете каждый отдельный тест на равенство:

if(jQuery(this).attr('href') === (templateDir + '/layouts/3-column-right.css') ||
    jQuery(this).attr('href') === (templateDir + '/layouts/3-column-left.css') ||
    jQuery(this).attr('href') === (templateDir + '/layouts/3-column-right-magazine.css') ||
    jQuery(this).attr('href') === (templateDir + '/layouts/3-column-left-magazine.css')) 

или более эффективно без объекта jQuery и без повторного создания значения href каждый раз:

var href = this.href;
if (href === (templateDir + '/layouts/3-column-right.css') ||
    href === (templateDir + '/layouts/3-column-left.css') ||
    href === (templateDir + '/layouts/3-column-right-magazine.css') ||
    href === (templateDir + '/layouts/3-column-left-magazine.css')) 

или, возможно, даже это сработает, чтобы проверить их все одним регулярным выражением:

if (this.href.match(new RegExp(templateDir + "/layouts/3-column-(right|left)(-magazine)?\\.css$")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...