ページのタイトルに基づいてdivを表示または非表示にしようとしています。これは、値をページに渡すより良い方法を見つけられないためにのみ必要です。 HTMLファイルでもJavascript string.slice()に負の値がある
function toggle(divId) {
var divArray = document.getElementsByTagName("div");
for(i = 0; i < divArray.length; i++){
if(divArray[i].id == divId){
if(divArray[i].style.display != 'none'){
divArray[i].style.display = 'none';
}else{
divArray[i].style.display = '';
}
}
}
}
function togglePayLink() {
var h1Array = document.getElementsByTagName("h1");
for(i = 0; i < h1Array.length; i++){
if(h1Array[i].id == 'Title'){
var title = h1Array[i].innerHTML;
title = title.slice(1);
title = title.slice(-4);
toggle('descr'+ title);
}
}
}
ページのタイトルと見出しされています
ここでHTMLファイル内の現在のコードです。 %% GLOBAL_PageTitle %%は、私がアクセスできないサーバー側のコードに置き換えられます。ただし、値は「$ 100料金」(数値が異なる)になります。
<h1 id="Title" class="TitleHeading">%%GLOBAL_PageTitle%%</h1>
は最後に、私は、フォーマットDESCR +数のidの持つ隠されたdiv要素のセットを持っているので、ページのタイトルは「$ 100料金」である場合、私は、ID「descr100」とdiv要素を示したいと思います。
<div id="descr100" style="display:none;width: 75%;"></div>
上記のスクリプトを実行するとエラーは表示されません(私はChromeのコンソールを使用しています)が、divは表示されません。私はトグル機能が動作していることは分かっています。なぜなら、以前はトグルしなければならなかったページ上の1つのdivだけで使用されていたからです。私は問題と思われるtogglePayLink関数を書いたが、これをどのようにデバッグするのか分からない。私は、タイトルのドル記号が問題を引き起こす可能性があるのだろうかと思っていましたが、そうであればエラーが出ると思います。
EDIT:togglePayLink関数をstringの代わりにvarを使用するように変更しましたが、slice()が呼び出されたときにtypeErrorが発生しました。
これはスクリプトのクリーンアップに役立ちますが、jquery(http:// api)の.hide()/。show()関数を見ることができます。jquery.com/hide/)と疑似セレクタ.contains(https://api.jquery.com/contains-selector/) – Alyss
特定のIDを持つ要素を見つけるためにループする必要はありません。 'getElementById'を使って直接見つけることができます。 –
'String title = h1Array [i] .innerHTML;'という行が文法エラーを生成しないことはほとんどありません。とにかく、デバッガを使用してコードごとにステップごとにステップを進め、各ポイントで変数を調べる必要があります。最後に、スタイルプロパティを直接操作することは、クラスをトグルするよりも一般的にあまり好ましくありません。これは 'elt.classList.toggle( 'hide') 'などで行うことができます。また、弦の配線された箇所でのスライシングは壊れやすくなります。代わりに 'title.match(\/d + /)'のようなものを使うことを検討してください。 –