Adoboe の RoboHelp 2017 によって、HTML5 で生成されたヘルプ ファイルに自動的に作成される次のコードがあります。
<object id="MapCtrl" classid="CLSID:A8ECFBF5-08CC-4065-BD74-0FAD1EA61317" data-rhtags="1" class="" width="1" height="1">
</object>
<p style="font-family:Arial;font-size:12pt;font-weight: normal;font-style: normal;text-decoration: none;" data-rhtags="1" class="" align="left">In this Topic <a class="dropspot" href="javascript:TextPopup(this)" id="MTHotSpot46267"><span class="MTText" style="display: none;">Show</span><span class="MTText">Hide</span></a></p>
In this Topic
javascript を使用して、アンカー タグの表示/非表示リンクに影響を与えずに、テキストのインスタンスをローカライズされた文字列で動的に変更しようとしています。
これが私の現在の試みです:
function localizeMiniTOC(){
const minitoc = document.querySelector('#MapCtrl + p');
const text = minitoc.textContent;
console.log (typeof text);
console.log(text.includes('In\xa0this\xa0Topic'));
if (text.includes('In\xa0this\xa0Topic') === true){
let html = minitoc.innerHTML;
linkStart = html.indexOf('<a');
remaining = html.substring(linkStart,html.length);
minitoc.innerHTML = 'En Este Tema ' + remaining;
}
}
これはテキストを変更しますが、私が抱えている問題は、RoboHelp が作成するイベント リスナーも破棄することです。たとえば、上記のコードを適用する前の元の Firefox インスペクターは次のようになります。
上記のコードを実行すると、次のようになります。
今日、いくつかの調査を行いましたが、このリンクから、.innerHTML を使用すると「イベント リスナーなどの内部データが削除される」ことを理解しています: Element innerHTML がイベント リスナーを取り除く
しかし、アンカータグの前のテキストを上書きする別の方法を理解できないようですが、リンクの表示/非表示とイベントリスナーは無傷のままです。
私が試した他のこと:
- このページ (子孫のイベントリスナーを破棄せずに innerHTML に追加することは可能ですか? ) に基づいて、.insertAdjacentHTML() を使用しようとしましたが、どちらも機能しませんでした:
minitoc.insertAdjacentHTML('beforebegin','<p>En\xa0Este\xa0Tema\xa0' + remaining + '</p>');
(リンクされたページの例は、既存の要素に追加することでこれを行う方法を示していますが、要素に追加するのではなく、アンカー タグに至るまでのテキストを上書きする必要があります。)
.setAttribute を使用して onclick イベントを再作成しようとしました:
minitoc.setAttribute('onClick()',TextPopup('MTHotSpot46267'));
イベントリスナーを再作成しようとしましたが、それもうまくいきませんでした:
minitoc.addEventListener('click', TextPopup('MTHotSpot46267'));
オンラインのすべての例は、テキストの上書きではなく、追加または先頭への追加を扱っているようです。
In this Topic
リンクの表示/非表示およびそれらのリンクのイベント リスナーに影響を与えずに、ローカライズされた文字列でテキストを動的に上書きするにはどうすればよいですか?