0

学校のこの課題に取り組んでいますが、見つけられないロジックがどこかにあります。setElemId()要素IDを設定して返すはずの関数であるとほぼ100%確信していますが、何も返さずhref、クイックリンクに を設定する#と、 ではなく を設定するだけIDです。

HTML

<body>
   <div id="page">
      <div id="logo"><img src="hlogo.jpg" alt="Historic Documents" /></div>
      <div id="logosub">Department of History<br />Midwest University</div>

      <div id="doc">
         <h1 id="doctitle">The Federalist Papers <br />No. 10</h1>
         <p id="docsubtitle">The Union as a Safeguard Against 
            Domestic Faction and Insurrection<br />From the New York Packet. Friday, 
            November 23, 1787.</p>

         <p id="intro">To the people of the state of New York:</p>

         <p id="firstp">Among the numerous advantages promised by a well-constructed 
            Union, none deserves to be more accurately developed than its 
            tendency to break and control the violence of faction. The friend of 
            distresses under which we labor have been erroneously charged on the 
         </p>

         <p>By a <dfn id="firstkey">faction</dfn>, I understand a number of 
            citizens, whether amounting to a majority or a minority of the whole, 
            interest, adversed to the rights of other citizens, or to the permanent 
            and aggregate interests of the community.</p>

         <p>The other point of difference is, the greater number of citizens and 
            extent of territory which may be brought within the compass of 
            the former than in the latter. The smaller the society, the fewer 
         </p>

      </div>
   </div>
</body>
</html>

Javascript

function addEvent(object, evName, fnName, cap) {
   if (object.attachEvent)
       object.attachEvent("on" + evName, fnName);
   else if (object.addEventListener)
       object.addEventListener(evName, fnName, cap);
}

addEvent(window, "load", makeKeyWordBox, false);

// Returns an array of Text
function makeElemList(elem)
{
    var elemList = document.getElementsByTagName('dfn');
    var elemTextArr = new Array();

    for(var i = 0; i < elemList.length; i++)
        elemTextArr[i] = elemList[i].innerText.toLowerCase();

    elemTextArr.sort();
    return elemTextArr;
}

// Searches for and returns a single ID
function setElemId(elem, elemText)
{
    var elemList = document.getElementsByTagName(elem);
    var elemTextArr = new Array();
    var elemId;

    for(var i = 0; i < elemList.length; i++)
    {
        elemTextArr[i] = elemList[i].innerText.toLowerCase();

        if(elemTextArr[i] == elemText)
        {
            if(elemList[i].id = null)
            {
                elemId = elemText + i;
                elemList[i].setAttribute('id', elemId);
                return elemId;
            }
            else
            {
                alert(elemList[i].id);
                elemId = elemList[i].id;
                return elemId;
            }
        }
    }
}

function makeKeyWordBox()
{
    var keywords = makeElemList('dfn');
    var historyDoc = document.getElementById('doc');
    var keywordBoxTitle = document.createElement('h1');
        keywordBoxTitle.innerText = "Keywords";
    var keywordBox = document.createElement('div');
        keywordBox.id = "keywords";
        keywordBox.appendChild(keywordBoxTitle);
    var ulList = document.createElement('ul');
        keywordBox.appendChild(ulList);

    for(var i = 0; i < keywords.length; i++)
    {
        var linkId = setElemId('dfn', keywords[i]);
        var newListItem = document.createElement('li');
        var newLink = document.createElement('a');
            newLink.innerText = keywords[i];
            newLink.href = "#" + linkId;
        newListItem.appendChild(newLink);
        ulList.appendChild(newListItem);
    }

    historyDoc.insertBefore(keywordBox, historyDoc.firstChild);
}
4

2 に答える 2

0

「ifステートメントにヒットしますが、a)常にfalseになります(IDがすでに設定されているように)」

変更してみてください:

if(elemList[i].id = null)

に:

if(!elemList[i].id)

をと比較するのではなくに割り当ててidいた ( orを意味するときに使用した) と、 はそれを(偽) と評価し、毎回ケースに入ります。nullnull======ifnullelse

nullまた、とにかく比較したくないと思います。なぜなら、id設定されていないものはそうではないからですnull(私が試したとき、設定idされていないものは空の文字列でした"")。演算子を使用して「偽」である!かどうかをテストする方が簡単です。id

于 2012-12-08T05:36:33.227 に答える
0

キーワードの完全一致を検索しているようです。どの要素にも探しているキーワードが正確に含まれていない (代わりにテキストが含まれている) ため、一致するものはありません。

代わりに、試してくださいif( elemTextArr[i].indexOf(elemText) > -1)

検索用語を小文字に変換していないように見えることに注意してください。大文字を入力しても、一致するものはありません。

于 2012-12-07T23:37:02.433 に答える