0

私はこのコードに問題がありますこのコードはIEを除くすべてのブラウザでうまく動作します、私のIEは8.0の解決策ですか?jqueryを誠実に使用しません注:Node.TEXT_NODEを3に変更しましたが、他のエラーが発生しました:'textContent'がnullであるか、オブジェクトではありません

 <!DOCTYPE html>
 <html>
 <head>
 <script>

 function replaceText(oldText, newText, node){ 
   node = node || document.body; 

   var childs = node.childNodes, i = 0;

   while(node = childs[i]){ 
     if (node.nodeType == Node.TEXT_NODE){ 
  node.textContent = node.textContent.replace(oldText, newText); 
} else { 
  replaceText(oldText, newText, node); 
} 
     i++; 
   } 
 }

 </script>
 </head>
 <body>
 old
 <h1 id="myHeader" onclick="replaceText('old','new')">old Click me! whatever</h1>

 </body>
 </html>

見つけた

   while(i < childs.length){
   if (rgx.test(document.body.innerHTML)){
   childs[i][textPropName] =childs[i][textPropName].replace(rgx,'new');
   }
   else
   {
   replaceText(oldText, newText,document.body.childNodes[i])
   }
        i++; 
      } 
    }  
4

2 に答える 2

3

Node.TEXT_NODEtextContentはIE8では使用できません。


3の代わりに使用Node.TEXT_NODEし、使用できないinnerText場合textContentは使用します。

var textPropName = node.textContent === undefined ? 'innerText' : 'textContent';

if (node.nodeType == 3) {
    node[textPropName] = node[textPropName].replace(oldText, newText); 
} else { 
    replaceText(oldText, newText, node); 
}

textPropName関数が呼び出されるたびに再チェックしないように、おそらく関数の外部にキャッシュする必要があります(document.bodyテストに使用)。

于 2013-01-27T04:15:09.017 に答える
2

textContent の代わりに、nodeValue を使用します

node.nodeValue = node.nodeValue.replace(oldText, newText); 
于 2013-08-23T17:00:06.200 に答える