需要帮助来改进这个最大的公共子串实现

时间:2011-07-11 13:39:14

标签: javascript html

我已经在网上扫描了我在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文本文档中搜索纯文本。

您可以观看脚本[{3}}

<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 个答案:

答案 0 :(得分:0)

好像你想采取不同的方法。

我不确定你想要做什么,但似乎这样的事情就是你想要的:

  1. 您申请了一份文件
  2. 解析文档中的链接,并将其存储在由其ID键入的对象中,其值为文本
  3. 更改查找功能以追踪链接列表
  4. 这是一个代码示例(为简单起见使用jQuery):

    //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; }