0

我有一个包含许多链接的 iframe,我正在尝试将这些链接正确复制到我的主页。我当前的代码错误地复制了链接。例如,如果 iframe 中的实际超链接是这样的:

<a href="./ok/doit.php"> 5 </a> 

将其复制到主页后,超链接变成这样:

http://ok.mysite24.com/spring/./ok/doit.php

因此,从我的主页中单击这些链接后,我会转到死链接而不是实际链接。是否可以通过正确复制 iframe 内容来解决这个问题,或者我应该修改我的 iframe 内容吗?

<script type='text/javascript'>
function getFrameContents(){
   var iFrame =  document.getElementById('myframe');
   var iFrameBody;
   if ( iFrame.contentDocument ) 
   { // FF
     iFrameBody = iFrame.contentDocument.getElementsByTagName('body')[0];
   }
   else if ( iFrame.contentWindow ) 
   { // IE
     iFrameBody = iFrame.contentWindow.document.getElementsByTagName('body')[0];
   }
 alert(iFrameBody.innerHTML);

document.getElementById('response').innerHTML = iFrameBody.innerHTML

 }
</script>

<iframe id ='myframe' src='http://www.mysite.com/ok.php'></iframe>

<div id="response"> 
    <p><a href="#" onMouseDown="getFrameContents()">getFrameContents! </a></p>

接受用户输入用户输入次数的haskell方式?

我刚刚开始学习haskell,它的思维方式与我习惯的方式(C 风格的语言)大不相同。

无论如何,对于我正在处理的一个问题,我需要接收用户输入。它将以形式出现

2
10
20

例如。格式是第一行表示后面的行数。我的第一个想法是我会阅读第一行,然后循环运行该次数。虽然这是 Haskell!据我所知,循环是不可能的。

我的下一个想法是,我将使用第一行输入来填充一个列表,其中包含后面的其他 n 个数字。我不知道我会怎么做。我在这里是因为我什至不确定我会寻找什么来解决这个问题。

提前感谢您向我展示了执行此操作的 Haskell 方法。到目前为止很难,但我听到“开明”的人的好评如潮,所以我认为自己学习语言不会有什么坏处。

这是可以运行一次的代码,但需要为第一行之后的第二行到 n 行中的每一行运行一次。

l n = (-1)^n/(2*(fromIntegral n)+1)
a m = sum [l n | n <- [0..(m-1)]]
main =
    do  b <- readLn
        print (a b)

(另外,我很想听听我是否可以对我的代码进行其他改进,但在这种特定情况下,它是为了让比赛以尽可能少的字符数解决问题。我不想得到更多特别是在其他人试图寻找相同问题的答案的情况下。)

编辑:感谢大家的回答。我最终得到了一些我想要的东西。我将代码放在下面以供后代使用。可悲的是,即使它以出色的成绩通过了测试用例,但他们测试它的实际数据却不同,他们告诉我的只是我得到了“错误的答案”。此代码“有效”,但无法为您提供正确答案。

import Control.Monad
l n = (-1)^n/(2*(fromIntegral n)+1)
a m = sum [l n | n <- [0..(m-1)]]
main =
    do  b <- readLn
        s <- replicateM b readLn
        mapM_ print [a c | c <- s]
4

2 回答 2

1

在检索所有链接的 innerHTML 循环并将其 DOM-href-attribute 替换为其 JS-href-property 之前。这会将 href 属性转换为绝对 URI。

//clone the body to keep the original untouched
iFrameBody = iFrameBody.cloneNode(true);

var links = iFrameBody.getElementsByTagName('a');
for (var i = 0; i < iFrameBody.getElementsByTagName('a').length; ++i) {
    if (links[i].hasAttribute('href')) {
        links[i].setAttribute('href', links[i].href);
    }
}
于 2013-02-03T01:20:00.237 回答
-1

看起来您想将一个相对地址解析为 iframe 的源地址,这也可能是相对的。伪代码(ish):k

function resolveAddress(source, link) {
   if(link.indexOf("../") == 0) {
       index--; // go up one directory .//
       return resolveAddress(source.substr(0,source.lastIndexOf("/")-1),
                      link.substr(1, link.length-1)); 
   }
   else if(link.indexOf("./") == 0) {
       // reduce to current directory ./
       return resolveAddress(source.substr(0,source.lastIndexOf("/"),
                      link.substr(2, link.length-1));
   }
   return source + link;
}      

frame_src = "http://www.mysite.com/ok.php"
link = "./ok/doit.php";

resolveAddress(frame_src, link);
//=> "http://www.mysite.com/ok/doit.php"
于 2013-02-03T00:59:39.003 回答