【问题标题】:Get url from iframe and onclick modify the address从 iframe 获取 url 并点击修改地址
【发布时间】:2015-07-28 19:04:15
【问题描述】:

我正在尝试找到一种从 iframe 获取 url 并使用 javascript 修改链接并移动到另一个页面的方法。基本上 iframe 中的地址类似于“http://www.somthing.com/12/somt/arr_1.htm”,使用 javascript 我想删除最后五个字符(留下这个“http://www. somthing.com/12/somt/arr_"),然后添加下一个逻辑数字(将链接设为“http://www.somthing.com/12/somt/arr__2.htm”)。

到目前为止,我有这样的东西。

    <script language="javascript" type="text/javascript">
    function urlGen(f){
                       var i1 = document.getElementById("iframe_id").contentWindow.location.href;
                       var i2 = "1.htm";
                       var i3 = "2.htm";
                       var newURL = i1 - i2 + i3
                       f.action = i1 - i2 + i3
                       return i1 - i2 + i3;
                       }
</script>

所以根据我对你所说的理解,它应该看起来像这样? 所以它应该看起来像这样? (请记住,我是 javascript 的老大哥......“我不是一个聪明人,但我知道 java 是什么”)

    <script language="javascript" type="text/javascript">
    function urlGen(f){
                       var i1 = document.getElementById("iframe_id").contentWindow.location.href = newURL;
                       newURL = il.slice(0, -5);
                       var i3 = "2.htm";

                       f.action = newURL + i3
                       }
</script>

【问题讨论】:

    标签: javascript iframe


    【解决方案1】:

    试试这个正则表达式匹配

    var i1 = "http://www.somthing.com/12/somt/arr_41.htm";
    
    s = i1.replace(/\d+\.htm$/, function(attr) {
      return attr.replace(/\d+/, function(val) {
        return parseInt(val,10) + 1;
      });
    });
    
    
    alert(s);

    这将更改以 X.htm(其中 X 是数字)结尾的任何字符串,用 X+1 代替 X(改编自 https://stackoverflow.com/a/1742841)。

    【讨论】:

    • 为你的 parseInt 记住基数 parseInt(val, 10)
    • 为什么要使用正则表达式。最后五个字符需要修剪。这可以通过String.prototype.slice 轻松完成。这里不需要正则表达式。
    • 但是更长的数字呢?
    【解决方案2】:

    您正在正确获取网址,但是您的字符串操作不起作用。

    你有一个修剪字符串的特殊功能:

     newUrl = i1.slice(0, -5);
    

    这将修剪网址的最后 5 个字符。

     newUrl = newUrl + i3;
    

    这会将修改后的网址与新网址连接起来。

     return newUrl;
    

    现在当你这样做时:

     document.getElementById("iframe_id").contentWindow.location.href = newUrl;
    

    它将使用新的 url。


    带有工作示例:

    这个例子还加入了数字加法:

     i1.substr(0,i1.lastIndexOf("_")+1);
    

    该位使用字符串函数substr。它用于检索字符串的一部分。第一个参数是开始位置,第二个参数是结束。我使用字符串函数lastIndexOf 来查找最后使用的下划线在url 中的位置,然后添加一个以确保它包含下划线。上面的代码行将打印:

    http://stacksnippets.net/arr_
    

    要构建新的 url,我们现在需要数字。 parseInt 在这里帮助你:

    (parseInt(i1.substr(i1.lastIndexOf("_")+1), 10)+1)
    

    我已将整个部分放在括号内,以便将其解析为总和。 parseInt 的第一个参数是包含数字的字符串(1.htm)。我们使用substr 再次选择它。现在起始位置是下划线 + 1。最后一个参数被省略,因为我们可以一直走到字符串的末尾。 parseInt 会将1.htm 解析为1。第二个参数用于强制函数使用十进制系统。 (基数 10)。总和的最后一部分将数字加一。这段代码的结果将是2

    把它们加在一起会给我们:

    http://stacksnippets.net/arr_2.htm
    

    function urlGen(f) {
          var i1 = "http://stacksnippets.net/arr_1.htm"; //cannot grab the url because of same origin policy
          //var i1 = document.getElementById("iframe_id").contentWindow.location.href; //
          var newURL = i1.substr(0,i1.lastIndexOf("_")+1) + (parseInt(i1.substr(i1.lastIndexOf("_")+1), 10)+1) + ".htm";
          f.action = newURL;
          return newURL;
        }
    
         //NOT PART OF THE SOLUTION:
    
        document.body.onload = function() {
          document.body.innerHTML += "Document initial url: http://stacksnippets.net/arr_1.htm";
          var url = urlGen(new Object); //dummy object
           document.body.innerHTML += "<br />Changed url: " + url;
        }

    【讨论】:

    • 谢天谢地,我刚刚发布了我理解有限的例子......这很伤心。
    猜你喜欢
    • 2016-08-21
    • 1970-01-01
    • 2011-07-03
    • 2012-05-09
    • 2017-12-20
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    相关资源
    最近更新 更多