1

このオブジェクトにはいくつかのメソッドがあり、新しいものを作成します

<li><a href="?">http://www.domain.com</a></li>

ページのコンテンツ内で見つかった各リンクに対して、以前に生成された

<ul id="container"></ul>

外観は次のとおりです。

var linkObject = {
    parseUrl : function(url) {

        "use strict";

        var thisATag = document.createElement('a');
        thisATag.href = url;
        var thisHostName = thisATag.hostname;
        return thisHostName;

    },
    displayLinkContainer : function() {        

        "use strict";

        var thisWrapper = document.getElementById("contentWrapper");

        var thisDiv = document.createElement("div");
        thisDiv.setAttribute('id', 'wrapper');
        thisWrapper.appendChild(thisDiv);

        var thisHeading = document.createElement("h2");
        var thisHeadingTextNode = document.createTextNode("The list of links");
        thisHeading.appendChild(thisHeadingTextNode);
        thisDiv.appendChild(thisHeading);

        var thisUl = document.createElement("ul");
        thisUl.setAttribute('id', 'container');
        thisDiv.appendChild(thisUl);    

    },
    displayLink : function(thisLink, thisActualUrl) {

        "use strict";

        var thisContainer = document.getElementById('container');        
        var thisLiTag = document.createElement('li');
        var thisATag = document.createElement('a');

        thisATag.setAttribute('target', '_blank');        
        thisATag.setAttribute('href', encodeURI(thisActualUrl));    

        var thisTextNode = document.createTextNode(thisLink);

        thisATag.appendChild(thisTextNode);        
        thisLiTag.appendChild(thisATag);        
        thisContainer.appendChild(thisLiTag);

    },
    findLinks : function() {

        "use strict";

        var thisHrefs = [];
        var thisLinks = document.getElementsByTagName('a');

        if (thisLinks.length > 0) {

            for (var i = 0; i < thisLinks.length; i++) {

                var thisAHref = thisLinks[i].getAttribute('href');

                if (thisAHref !== '#') {
                    var thisAUrl = linkObject.parseUrl(thisAHref);
                    thisHrefs.push(thisAUrl);
                    linkObject.displayLink(thisAUrl, thisAHref);

                }

            } 
        }
    }
};
linkObject.findLinks();

html :

<div id="contentWrapper"><a href="http://www.google.co.uk/">Google</a> <a href="http://yahoo.com">Yahoo</a></div>

タグ要素の作成を削除すると正常に<a>動作しますが、そのまま実行するとブラウザがスタックしてクラッシュします。私は何が間違っているのですか?

いくつかのデバッグの後、問題はthisActualUrlにあることがわかりました。コメントして、次のようにハッシュだけに置き換えたときのようです。

thisATag.setAttribute('href', '#' /* encodeURI(thisActualUrl) */);

コードは正常に実行されますが、thisActualUrl で実行すると、ページで見つかったリンクが表示され、現在のページの URL へのリンクが長いループで表示され、最終的にブラウザーがクラッシュします。

4

1 に答える 1

-1

エラーを再現できません:

http://jsfiddle.net/ENXwY/

したがって、問題はthisActualUrlパラメータにある可能性があります

于 2012-06-19T20:03:15.353 に答える