2011-07-11 15 views
0

我已經掃描了網頁以查找在我的xmlhttp請求中使用的最大子字符串實現,但是我發現只有1個工作,在其他情況下,responsetext沒有被視爲字符串不管是什麼我已經寫:需要幫助來改進這個最大的公共子字符串實現

txt = txt + ""; // or 
txt = new string(txt);) 

此功能,但它是可怕的慢。我只是想知道如果你在那裏編寫大師可以幫助我改進這個算法。

那我打電話一個XMLHttpRequest該網站看起來像這樣

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<html> 
<head> 
    <title>Index of /</title> 
</head> 
<body> 
<h1>Index of /</h1> 
<ul><li><a href="/"> Parent Directory</a></li> 
<li><a href="random"> random/</a></li> 
<li><a href="random_2/"> random_1/</a></li> 
<li><a href="radnfdom"> random/</a></li> 
<li><a href="rasrdndddom_1/"> random_1/</a></li> 
<li><a href="random_43"> random/</a></li> 
<li><a href="test/"> random_1/</a></li> 
</ul> 
</body></html> 

在您可以更好的速度去除所有的HTML標籤。換句話說,我將只搜索HTML中的純文本文本文件。

您可以在觀賞動作腳本here at tdsoft.se

<html> 
<head> 
<script type="text/javascript"> 
var txt; 
var buildName = ""; 
var xmlhttp; 




function lcs(a, b) { 
    var aSub = a.substr(0, a.length-1); 
    var bSub = b.substr(0, b.length-1); 

    if (a.length == 0 || b.length == 0) { 
    return ""; 
    } else if (a.charAt(a.length-1) == b.charAt(b.length-1)) { 
    return lcs(aSub, bSub) + a.charAt(a.length-1); 
    } else { 
    var x = lcs(a, bSub); 
    var y = lcs(aSub, b); 
    return (x.length > y.length) ? x : y; 
    } 
} 

function loadXMLDoc(url,cfunc) 
{ 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=cfunc; 
xmlhttp.open("GET",url,true); 
xmlhttp.send(); 
} 


function myFunction() 
{ 

    loadXMLDoc("http://tdsoft.se/testni.html",handleXML); 


} 
var checkState = function(xmlhttp, callback) { 

try{ 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     callback(); 
     } 
     else { 
      // Check back again 1 sec later 
      setTimeout(checkState, 1000); 
     } 
    } 
    catch(err){ 
     setTimeout(checkState, 1000); 
    } 
}; 


function handleXML() 
    { 
checkState(xmlhttp, function() { 

    txt=xmlhttp.responseText; 
buildName = "random"; 
txt = txt.replace(/<&#91;^>&#93;*>/g, ""); 
var myvar = ""; 
myvar = lcs(txt, "random"); 
document.write(myvar); 
}); 
    } 
</script> 
</head> 
<body onLoad="myFunction()"> 
</body> 
</html> 
+1

函數在哪裏?你爲什麼不發佈實際的代碼? – Pointy

+0

@Pointy函數的名字是函數lcs(a,b)=) – wayne

+0

你想要達到什麼目的? – mplungjan

回答

0

好像你將要採取不同的方法在此。

我不能完全肯定你正在嘗試做一點,但它似乎像這樣的事情會是你想要什麼:

  1. 您請求文檔
  2. 解析中的鏈接文件並將它們存儲在通過其ID與價值觀是他們的文字
  3. 更改您的查找功能的鏈接列表

這裏去後鍵入對象的代碼示例(使用jQuery的SIM卡plicity):

//untested! 
var links = {}; 

function successFunction(data) { 
    var aTags = data.find('a'); 

    aTags.each(function() { 
     var $this = $(this); 
     links[$this.attr('href')] = $this.text(); 
    }); 
} 

function lookup(id) { 
    return links[id] || ''; 
} 

$.ajax({ 
    url: 'requestPage.htm', 
    success: successFunction 
}); 

編輯:

如果你想這樣做,非jQuery的只需更換以下的事情:

  • $.ajax您XMLHttpRequest的方法
  • data.find('a')getElementsByTagName
  • .each(function(){...})var i = aTags.length; while(i--) { links[aTags[i].href] = aTags[i].innerHTML; }