0

多くのリンクが含まれているiframを入手しましたが、それらのリンクをメインページに正しくコピーしようとしています。私の現在のコードは、リンクを誤ってコピーします。たとえば、実際のハイパーリンクが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を学び始めたばかりであり、それは私が慣れているもの(Cスタイルの言語)とは大きく異なる考え方です。

とにかく、私が取り組んでいる1つの問題については、ユーザー入力を受け取る必要があります。それは形で来るでしょう

2
10
20

例えば。フォーマットは最初の行で、その後の行数を示します。私の最初の考えは、最初の行を読んでから、その回数だけループを実行することでした。これはHaskellです!私の知る限り、ループは不可能です。

次の考えは、入力の最初の行を使用して、リストに続く他のn個の数字を入力することでした。しかし、これをどのように行うかはわかりません。私がここにいるのは、それを理解するために何を検索するのかさえわからないからです。

これを行うための面倒な方法を教えてくれてありがとう。今のところ大変ですが、「悟りを開いた」人から絶賛されているので、自分で言語を学ぶのも悪くないと思います。

これは1回だけ正常に実行されるコードですが、最初の行に続く2行目からn行目ごとに1回実行する必要があります。

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

1 つの相対アドレスを iframe のソース アドレスに解決したいようです。これも相対である可能性があります。疑似コード (っぽい):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 に答える