Answers:
您需要添加href属性并检查indexOf
而不是contains
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
if (window.location.href.indexOf("franky") > -1) {
alert("your url contains the name franky");
}
});
</script>
window.location.hash
没有window.location.href
。只需在OP的函数中交换这些值即可。
if (window.location.href.indexOf("franky") != -1)
会做到的。另外,您可以使用regexp:
if (/franky/.test(window.location.href))
像这样:
<script type="text/javascript">
$(document).ready(function () {
if(window.location.href.indexOf("cart") > -1)
{
alert("your url contains the name franky");
}
});
</script>
window.location.href
是window.location
developer.mozilla.org/zh-CN/docs/Web/API/Window.location
if
语句中添加另一个条件。要确保两者都存在,可以使用&&
Java脚本中的AND运算符: if( window.location.href.indexOf("cart") > -1 && window.location.href.indexOf("box") > -1 )
要检查它是否具有一个或另一个值,请使用OR运算符(两个管道字符)||
if( window.location.href.indexOf("cart") > -1 || window.location.href.indexOf("box") > -1 )
window.location
不是字符串,但是有一个toString()
方法。因此,您可以这样做:
(''+window.location).includes("franky")
要么
window.location.toString().includes("franky")
位置对象具有toString方法,该方法返回当前URL。您还可以将一个字符串分配给window.location。这意味着您在大多数情况下都可以像对待字符串一样使用window.location。有时,例如,当您需要在其上调用String方法时,必须显式调用toString。
正则表达式的方式:
var matches = !!location.href.match(/franky/); //a boolean value now
或者在简单的语句中,您可以使用:
if (location.href.match(/franky/)) {
我用它来测试网站是在本地运行还是在服务器上运行:
location.href.match(/(192.168|localhost).*:1337/)
这将检查href是否包含192.168
或localhost
AND,然后是:1337
。
如您所见,当条件变得更加棘手时,使用正则表达式比其他解决方案具有优势。
if(/franky/.test(location.href)) { /* regex matched */ }
如果我对比赛不做任何事情,使用起来会更简洁。
test
绝对比match
这种情况干净。
试试这个,它更短,并且可以像下面这样工作window.location.href
:
if (document.URL.indexOf("franky") > -1) { ... }
另外,如果您想检查以前的URL:
if (document.referrer.indexOf("franky") > -1) { ... }
尝试这个:
<script type="text/javascript">
$(document).ready
(
function ()
{
var regExp = /franky/g;
var testString = "something.com/frankyssssddsdfjsdflk?franky";//Inyour case it would be window.location;
if(regExp.test(testString)) // This doesn't work, any suggestions.
{
alert("your url contains the name franky");
}
}
);
</script>
试试indexOf
if (foo.indexOf("franky") >= 0)
{
...
}
您也可以尝试搜索(用于正则表达式)
if (foo.search("franky") >= 0)
{
...
}
使用Window.location.href在javascript中获取网址。该属性将告诉您浏览器的当前URL位置。将属性设置为其他内容将重定向页面。
if (window.location.href.indexOf('franky') > -1) {
alert("your url contains the name franky");
}
放入您的js文件
var url = window.location.href;
console.log(url);
console.log(~url.indexOf("#product-consulation"));
if (~url.indexOf("#product-consulation")) {
console.log('YES');
// $('html, body').animate({
// scrollTop: $('#header').offset().top - 80
// }, 1000);
} else {
console.log('NOPE');
}
~
,所以我查了一下:“这~
是一种将indexOf()
找到的返回值转换为真实值的技巧(同时使未找到的返回值变得虚假)。否则,人们会将其用于截断数字的副作用……” - stackoverflow.com/a/12299678/3917091
由于单词边界\b
或类似的设备,正则表达式对于很多人来说将是最佳的。当任何的发生字边界0-9
,a-z
,A-Z
,_
是在该侧的下一个匹配的,或当一个字母数字字符所连接到线或字符串末尾或开头。
if (location.href.match(/(?:\b|_)franky(?:\b|_)))
如果您使用if(window.location.href.indexOf("sam")
,您将获得flotsam
和的匹配项same
,等等。tom
不用正则表达式就可以匹配番茄和明天。
使其区分大小写就像删除一样简单i
。
此外,添加其他过滤器就像
if (location.href.match(/(?:\b|_)(?:franky|bob|billy|john|steve)(?:\b|_)/i))
让我们来谈谈(?:\b|_)
。RegEx通常定义_
为a,word character
因此不会引起单词边界。我们用它(?:\b|_)
来处理这个。要看到,无论其在认定\b
或_
弦上的两侧。
其他语言可能需要使用类似
if (location.href.match(/([^\wxxx]|^)(?:franky|bob|billy|john|steve)([^\wxxx]|$)/i))
//where xxx is a character representation (range or literal) of your language's alphanumeric characters.
所有这一切都比说容易
var x = location.href // just used to shorten the code
x.indexOf("-sam-") || x.indexOf("-sam.") || x.indexOf(" sam,") || x.indexOf("/sam")...
// and other comparisons to see if the url ends with it
// more for other filters like frank and billy
其他语言支持正则表达式,\p{L}
而javascript不支持,这将使检测外来字符的任务变得更加容易。就像是[^\p{L}](filters|in|any|alphabet)[^\p{L}]
(?#comments)
和Freespacing等语言# comments
。但是,这并不难读。//当我在JavaScript中使用复杂的正则表达式时,我保留了一个注释的副本,可以编辑大声笑。
假设您有这个脚本
<div>
<p id="response"><p>
<script>
var query = document.location.href.substring(document.location.href.indexOf("?") + 1);
var text_input = query.split("&")[0].split("=")[1];
document.getElementById('response').innerHTML=text_input;
</script> </div>
网址格式是 www.localhost.com/web_form_response.html?text_input=stack&over=flow
写入的文字<p id="response">
将是stack
"window.location.contains is not a function"