Ich versuche, divs basierend auf dem Titel der Seite zu verbergen oder anzuzeigen. Dies ist nur erforderlich, weil ich keinen besseren Weg finde, einen Wert in die Seite zu übertragen.Javascript string.slice() mit negativen Werten
Hier ist der aktuelle Code in der HTML-Datei:
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);
}
}
}
auch in der HTML-Datei wird ein Header mit dem Seitentitel. Der %% GLOBAL_PageTitle %% wird im serverseitigen Code ersetzt, auf den ich keinen Zugriff habe. Die Werte werden jedoch "100-Dollar-Gebühr" (mit unterschiedlichen Nummern) sein.
<h1 id="Title" class="TitleHeading">%%GLOBAL_PageTitle%%</h1>
Schließlich Ich habe eine Reihe von versteckten Divs mit ids im Format Beschr + eine Zahl, so dass, wenn der Seitentitel ist „$ 100 Fee“ Ich mag die div mit dem id „descr100“ zeigen.
<div id="descr100" style="display:none;width: 75%;"></div>
Wenn das Skript oben läuft, bekomme ich keinen Fehler (ich Chrome-Konsole), aber das div nicht zeigen. Ich weiß, dass die Toggle-Funktion funktioniert, weil sie zuvor nur mit einem einzigen div auf der Seite verwendet wurde, die umgeschaltet werden musste. Ich habe die togglePayLink-Funktion geschrieben, von der ich annehme, dass sie das Problem ist, aber ich habe keine Ahnung, wie ich das austesten soll. Ich habe mich gefragt, ob das Dollarzeichen im Titel Probleme verursachen könnte, aber ich würde denken, dass ich einen Fehler bekommen würde, wenn das der Fall wäre.
EDIT: Changed die togglePayLink -Funktion, um var anstelle von Zeichenfolge zu verwenden, aber ich erhalte einen TypeError, wenn slice() aufgerufen wird.
Dies könnte helfen, Ihr Skript aufzuräumen, aber Sie können sich die Funktionen .hide() /. Show() in jquery (http: // api.jquery.com/hide/) und der Pseudo-Selektor .contains (https://api.jquery.com/contains-selector/) – Alyss
Sie müssen keine Schleife verwenden, um Elemente mit einer bestimmten ID zu finden. Sie können sie direkt mit 'getElementById' finden. –
Es ist sehr unwahrscheinlich, dass die Zeile 'String title = h1Array [i] .innerHTML;' keinen Syntaxfehler erzeugt - welche Konsole betrachten Sie? Wie auch immer, Sie sollten Ihren Code Zeile für Zeile mit dem Debugger durchlaufen und Variablen an jedem Punkt untersuchen. Schließlich ist das direkte Bearbeiten von Stileigenschaften im Allgemeinen weniger vorzuziehen als das Umschalten einer Klasse, die Sie mit 'elt.classList.toggle ('hide')' oder etwas ähnlichem machen können. Außerdem ist das Schneiden an fest verdrahteten Stellen in der Saite fragil; Verwenden Sie stattdessen etwas wie 'title.match (\/d + /)'. –