jquery 使用JavaScript将相对路径转换为绝对路径

zbwhf8kr  于 2022-12-03  发布在  jQuery
关注(0)|答案(4)|浏览(223)

于飞:

<a href="/">1</a> // link to http://site.com
<a href="/section/page/">2/a> // link to http://site.com/section/page/
<a href="http://site.com/">3</a>
<a href="../gallery/1/">4</a> // link to http://site.com/gallery/1/

JS:

$("a").live('click', function(){
    var url = $(this).attr("href");
    //do something
});

如何通过jQuery将相对路径(var url)转换为绝对路径?
如果脚本已经是绝对路径,则不应执行任何操作。

  • 谢谢-谢谢
nle07wnf

nle07wnf1#

我非常肯定,如果您使用href * 属性 * 而不是获取 * 属性 *,您将得到一个完整的url,其域为:

$("a").live('click', function(){
    var url = this.href;    // use the property instead of attribute
    //do something
});

正如@Phrogz链接的问题所指出的,听起来IE6似乎存在问题。
如果你需要支持它,你可能需要从不同的部分构建href,比如this.hostthis.pathname。IE6支持这些属性。你也可以使用其他属性,但是你需要验证支持。
jquery live()函数在1.7版中不建议使用,已从1.9版中删除,因此请使用替代on()

$("a").on('click', function(){
    var url = this.href;    // use the property instead of attribute
    //do something
});
cczfrluj

cczfrluj2#

这不是OP所要求的,但是如果有人试图对<img>标签这样做(就像我发现这个问题时一样),秘密是 * 不 * 使用jQuery的attr方法。
这将直接给出src属性的内容(如果是相对属性,则也是相对的):
$('#your_img').attr('src')
而对DOM对象本身调用.src总是会给出绝对路径(我所需要的):
$('#your_img').get(0).src

ymdaylpp

ymdaylpp3#

您可以使用jquery移动的

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>jQuery.mobile.path.makeUrlAbsolute demo</title>
  <link rel="stylesheet" href="//code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
  <script src="//code.jquery.com/jquery-1.10.2.min.js"></script>
  <script src="//code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
  <style>
  #myResult{
    border: 1px solid;
    border-color: #108040;
    padding: 10px;
    }
  </style>
</head>
<body>

  <div role="main" class="ui-content">
    <p>The absoulte URL used is http://foo.com/a/b/c/test.html</p>
    <input type="button" value="file.html" id="button1" class="myButton" data-inline="true">
    <input type="button" value="../../foo/file.html" id="button2" class="myButton" data-inline="true">
    <input type="button" value="//foo.com/bar/file.html" id="button3" class="myButton" data-inline="true">
    <input type="button" value="?a=1&b=2" id="button4" class="myButton" data-inline="true">
    <input type="button" value="#bar" id="button5" class="myButton" data-inline="true">
    <div id="myResult">The result will be displayed here</div>
  </div>
<script>
$(document).ready(function() {

   $( ".myButton" ).on( "click", function() {

      var absUrl = $.mobile.path.makeUrlAbsolute( $( this ).attr( "value" ), "http://foo.com/a/b/c/test.html" );

    $( "#myResult" ).html( absUrl );
 })
});
</script>

</body>
</html>

参考:https://api.jquerymobile.com/jQuery.mobile.path.makeUrlAbsolute/

rbl8hiat

rbl8hiat4#

现代的办法是:

const url = new URL('MyPage.aspx', location)

这将把页面转换成一个绝对url对象。

相关问题