используя переменные JavaScript в регулярных выражениях JavaScript - PullRequest
0 голосов
/ 30 ноября 2009

Я только привыкаю к ​​регулярным выражениям и не знаю, как использовать в них переменные JavaScript.

Мой код:

if (window.location.hostname == 'localhost') {
    var $sURLDomain = 'http://localhost/';
}
else {
    var $sURLDomain = 'http://mysite.com';
}


$('#content a[href^=$sURLDomain]').addClass('internal');

По сути, я устанавливаю переменную $sURLDomain в зависимости от того, нахожусь ли я на своем локальном или живом URL.

Затем я хочу проверить, действительно ли мои ссылки начинаются с переменной $sURLDomain, и использовать jQuery для добавления класса только к этим конкретным ссылкам.

Кажется, это не работает, поэтому я не уверен, как этого добиться.

Ответы [ 2 ]

1 голос
/ 30 ноября 2009
$('#content a[href^=$sURLDomain]').addClass('internal');
  1. JavaScript не выполняет интерполяцию строк в стиле PHP. Вы должны сказать '#content a[href^='+sURLDomain+']'.

  2. Необычно начинать переменные JavaScript с $. Некоторые люди используют это как своего рода флаг в стиле «венгерской нотации», согласно которому переменная является объектом-оболочкой из jQuery или другой библиотеки. Возможно, это хорошая идея, но в любом случае не используйте префикс $ перед вашими переменными только потому, что это то, что делает PHP.

  3. Селектор [^=...] проверяет начало значения атрибута для литеральной строки. В отличие от названия вопроса, здесь нет регулярных выражений . Единственное соединение с регулярными выражениями - это использование ^ для обозначения «начала строки».

  4. Если в URL есть специальный символ для селекторов, например ] или \, отсутствие экранирования означает, что выражение селектора будет нарушено. Вероятно, маловероятно в этом конкретном случае, но это может быть проще (и проще развернуть с учетом меняющихся доменных имен) сказать:

    for (var i= document.links; i-->0;)
        if (document.links[i].hostname===location.hostname)
            $(document.links[i]).addClass('internal');
    
1 голос
/ 30 ноября 2009

Попробуйте это:

$('#content a[href^="'+$sURLDomain+'"]').addClass('internal');

Или:

$('#content a').filter(function() {
    return this.href && this.href.substr(0, $sURLDomain.length) != $sURLDomain;
}).addClass('internal');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...