我只是习惯了正则表达式,并且不确定如何在其中使用JavaScript变量。
我的代码是:
if (window.location.hostname == 'localhost') {
var $sURLDomain = 'http://localhost/';
}
else {
var $sURLDomain = 'http://mysite.com';
}
$('#content a[href^=$sURLDomain]').addClass('internal');
基本上我根据我是在本地网址还是在线网址设置变量$sURLDomain
。
然后我想测试我的链接是否以$sURLDomain
变量开头,并使用jQuery仅为这些特定链接添加类。
这似乎没有起作用,因此我不确定如何实现这一目标。
答案 0 :(得分:1)
试试这个:
$('#content a[href^="'+$sURLDomain+'"]').addClass('internal');
或者:
$('#content a').filter(function() {
return this.href && this.href.substr(0, $sURLDomain.length) != $sURLDomain;
}).addClass('internal');
答案 1 :(得分:1)
$('#content a[href^=$sURLDomain]').addClass('internal');
JavaScript不进行PHP样式的字符串插值。你必须说'#content a[href^='+sURLDomain+']'
。
使用$
开始JavaScript变量是不常见的。有些人将它用作一种“匈牙利符号”风格的标志,该变量是来自jQuery或其他库的包装器对象。这是否是一个好主意是有争议的,但无论哪种方式都不使用$
为变量添加前缀,因为这就是PHP的作用。
[^=...]
选择器检查文字字符串的属性值的开头。与问题标题相反,这里没有正则表达式。与正则表达式的唯一连接是使用^
来表示'字符串的开头'。
如果某个字符对于网址中的选择器特殊,例如]
或\
,则缺少转义意味着选择器表达式将会中断。在这种特殊情况下可能不太可能,但它可能更简单(并且更改域名更容易部署):
for (var i= document.links; i-->0;)
if (document.links[i].hostname===location.hostname)
$(document.links[i]).addClass('internal');