有没有任何方法获得URL没有查询字符串?

我有一个类似http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235的URL。

我想要得到没有查询字符串的URL: http://localhost/dms/mduserSecurity/UIL/index.php

JavaScript中有没有这种方法?目前我正在使用document.location.href,但它返回完整的URL。

197179 次浏览

试试这个:

let path = window.location.href.split('?')[0]
console.log({path})

location.toString().replace(location.search, "")

阅读有关Window.locationLocation接口的内容:

const urlPieces = [location.protocol, '//', location.host, location.pathname]
let url = urlPieces.join('')


console.log({urlPieces, url})

只需使用split(简单的方法)切割字符串:

var myString = "http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235"
var mySplitResult = myString.split("?");
alert(mySplitResult[0]);

使用window.location的属性

var loc = window.location;
var withoutQuery = loc.hostname + loc.pathname;
var includingProtocol = loc.protocol + "//" + loc.hostname + loc.pathname;

你可以在https://developer.mozilla.org/en/DOM/window.location处看到更多属性

这里有两种方法:

<script type="text/javascript">
var s="http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu
=true&pcode=1235";


var st=s.substring(0, s.indexOf("?"));


alert(st);


alert(s.replace(/\?.*/,''));
</script>

试一试:

document.location.protocol + '//' +
document.location.host +
document.location.pathname;

(注意:.host而不是.hostname,这样端口也会被包括在内,如果需要的话)

var url = window.location.origin + window.location.pathname;

如果你也想删除哈希,试试这个:window.location.href.split(/[?#]/)[0]

获取URL的所有部分,除了查询:

var url = (location.origin).concat(location.pathname).concat(location.hash);

注意,如果有哈希的话,这里也包括哈希(我知道示例URL中没有哈希,但为了完整起见,我包含了这个方面)。要消除散列,只需排除.concat(location.hash)

更好的做法是使用concat来连接Javascript字符串(而不是+):在某些情况下,它可以避免类型混淆等问题。

location.href.slice(0, - ((location.search + location.hash).length))怎么样

下面是使用URL()接口的方法:

new URL(location.pathname, location.href).href

只需将这两行添加到$(document)。在JS中准备如下:

$(document).ready(function () {
$("div.sidebar nav a").removeClass("active");
$('nav a[href$="'+ window.location.pathname.split("?")[0] +'"]').addClass('active');
});

最好使用美元符号($)(以)结尾

$('nav a[href$

而不是(^)(以)开头

$('nav a[href^

因为,如果你使用(^)符号并且你在导航菜单中有嵌套的url,(例如“/account”和“/account/roles”)

它会激活它们两个。

如果您正在使用导航栏,并希望在单击侧栏导航后获得纯url,那么以下代码可能会有帮助:

$(document).ready(function () {
$("div.sidebar nav a").removeClass("active");
var urlPath = window.location.pathname.split("?")[0];
var nav = $('div.sidebar nav a').filter(function () {
return $(this).attr('href').toLowerCase().indexOf(urlPath.toLocaleLowerCase()) > -1;
});
$(nav).each(function () {
if ($(this).attr("href").toLowerCase() == urlPath.toLocaleLowerCase())
$(this).addClass('active');
});
});

window.location.href.split("#")[0].split("?")[0]

你可以像这样使用URL构造函数:

const href = 'http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235'; // document.location.href
const url = new URL(href);
const noSearchUrl = href.replace(url.search, '');
console.log(noSearchUrl);

你可以创建一个URL实例,然后清除查询字符串:

const url = new URL(document.location.href);
url.search = '';
console.log(url.href);