2017-01-24 15 views
0

非常に遅いです。私はjQueryソリューションを考え出しましたが、読み込み時間の点では高価でしたが、私はJavascriptソリューションを考え出していますが、私は立ち往生しています。私はJSに慣れていないので、DOMについて多く知っています。このJavaScriptは私が達成しようとしている何

私が与えたHTMLは、それ自身100回(同じ正確なスケルトン)を繰り返します。コードをより効率的にするにはどうすればよいですか?また、私は "nullのプロパティタイトルを設定できません"エラーを取得しています。

var ratedSection = document.getElementsByClassName('RatedSection'); 
 
var ratedQuest = document.getElementsByClassName('RatedQuest'); 
 
var selector = document.getElementsByClassName('Selector'); 
 

 
for (var i = 0; i < ratedSection.length; i++) { //loops through ratedsection 
 
    var left = ratedSection[i].querySelector('.Left'); 
 
    var right = ratedSection[i].querySelector('.Right'); 
 

 
    left = left.innerHTML.replace(/<br>/g, " "); 
 
    right = right.innerHTML.replace(/<br>/g, " "); 
 

 
    for (var j = 0; j < ratedQuest.length; j++) { 
 
    for (var k = 0; k < selector.length; k++) { 
 
     var index = ratedQuest[j].querySelector('input').value; 
 

 
     if (index == 1) 
 
     selector[k].querySelector('abbr').title = left; 
 

 
     else if (index == max) 
 
     selector[k].querySelector('abbr').title = right; 
 
    } 
 
    } 
 
}
<table class="RatedSection"> 
 
    <tr class="Header"> 
 
    <td class="Left">Stuff 
 
     <br>inside 
 
     <br>here 
 
    </td> 
 
    <td class="Right">More 
 
     <br>stuff 
 
     <br>inside 
 
     <br>here 
 
    </td> 
 
    </tr> 
 
    <tr class="RatedQuest"> 
 
    <td class="Selector"> 
 
     <abbr title>7</abbr> 
 
     <abbr title>1</abbr> 
 
    </td> 
 
    </tr> 
 
</table>

答えて

7

のは、いくつかの混乱を削除し、ループのコードを見てみましょう:

FOR EACH section IN PAGE 
    FOR EACH quest INSIDE section 
    FOR EACH selector INSIDE quest 

for(var i = 0; i < ratedSection.length; i++) 
    for(var j = 0; j < ratedQuest.length; j++) 
    for(var k = 0; k < selector.length; k++) 

私はあなたを推測しているが、この(擬似コード)を書きたいです

実際にはこれを実行しています:

FOR EACH section IN PAGE 
    FOR EACH quest IN PAGE 
    FOR EACH selector IN PAGE 

ループのたびに、現在のセクション内のものだけでなく、クエスト/セレクタアイテムの全ページが表示されます。現在のセクションからではなく、documentからクエストとセレクタへの参照を取得しています。

100回反復する代わりに、10000回反復しています。最初のループを入力するときにセクションオブジェクトにquerySelectorを使用します。

+1

したがって、必要な要素だけを取得するには、ratedQuest = ratedSelection [i] .getElementsByClassName( 'RatedQuest')などのようにします。 – SethWhite

+0

実際には、それは=より小さいページで試してみて、 'console.log'ステートメントを入れて正しい要素を選択していることを確認してください。 – slezica

+0

それはそれを説明しています。そのコードを実行するのに80秒かかる...私は助けてくれてありがとう! – juice

関連する問題