innerHTML abhängig von einem bestimmten Werte/Inhalt ändern

Jongens

Grünschnabel
Ich habe mehrere Absätze gleicher Klasse, möchte das innerHTML aller Absätze auslesen und nur das innerHTML des Absatzes mit dem Wert "111,11 €" ändern. Egal was ich probiere, es wird immer innerHTML aller Absätze geändert. Sorry für Fehler in meiner Anfrage, das ist meine allererste!

Javascript:
  <p class="Streichpreis">128,00 €</p>
  <p class="Streichpreis">175,00 €</p>
  <p class="Streichpreis">111,11 €</p>
  <p class="Streichpreis">139,00 €</p>
  <p class="Streichpreis">142,00 €</p>
  <p class="Streichpreis">126,00 €</p>
   
<script>
   window.onload = function () {
   var x = document.getElementsByClassName("Streichpreis");
       if (x.innerHTML = "111,11 €") {
           for (var i = 0; i <= x.length; i++) {
           x[i].innerHTML = "Sonderpreis";
           }
       }
   }
</script>
 
Hallo,

was willst du den genau machen? Kommt der Wert nur einmal vor oder mehrmals?

Code:
var Element= document.getElementsByClassName("Streichpreis");
var searchText = "111,11 €";
var found;

for (var i = 0; i < Element.length; i++) {
  if (Element[i].textContent == searchText) {
    found = Element[i];
    break;
  }
}
Die Lösung ist aber etwas dreckig.
 
Der Wert kann mehrmals vorkommen, aber ich weiß nicht, wie oft. Warum dreckige Lösung?


(PS. ich glaube, ich muss auch noch eine Signatur anlegen?)
 
Naja, ist halt reines Javascript. Nutzt du Jquery oder ähnliches?

mit jquery würde es in etwa so aussehen:
Code:
 var elements = $('.Streichpreis : contains("111,11 €")');
 
Mit jquery oder Ähnlichem kenne ich mich nicht aus und es wäre für diese kleine Manipulation wahrscheinlich auch etwas überdimensioniert. Kannst du mir bitte nochmals helfen, wie ich mit reinem Javascript diesen einen Inhalt ändern kann. Wenn ich deinen Code richtig interpretiere, sind bisher in dem doch nur die Elemente gespeichert, in denen der searchText enthalten ist. Wie müste es dann weitergehen?
 
Sorry, ich muss wohl die eckigen Klammern auskommentieren ...sind bisher in dem \[i\] doch nur die Elemente gespeichert...
 
Also, um es noch mal etwas verständlicher zu machen, ich möchte, dass das Script in allen Absätzen, in denen der Preis "111,11 €" drinsteht, diesen Preis mit dem Wort "Sonderpreis" überschreibt.
 
HTML:
<p class="Streichpreis">128,00 €</p>
<p class="Streichpreis">175,00 €</p>
<p class="Streichpreis">111,11 €</p>
<p class="Streichpreis">139,00 €</p>
<p class="Streichpreis">142,00 €</p>
<p class="Streichpreis">126,00 €</p>

Code:
window.onload = function() {
  var x = document.getElementsByClassName("Streichpreis");
  var found;
  for(var i = 0; i < x.length; i++) {
    if(x[i].textContent = "111.11 €") {
      found = x[i];
      if(found) found.innerText = found.innerText + " Sonderpreis";
    }
  }
 };

unter jQuery wäre es so:
Code:
var ele = $('.Streichpreis');
var searchString = "111,11 €";
var found;

for(var i = 0; i < ele.length; i++) {
  if(ele[i].innerText == searchString) {
    found = ele[i];
    found.innerText = found.innerText + " Sonderpreis";
  }
}
 
Zuletzt bearbeitet:
Mir würde ja schon weiterhelfen, wenn ich wüsste, warum mein Code nicht funktioniert. Die for-Schleife steht innerhalb einer if_Anweisung, sollte den Code also nur abarbeiten, wenn die if-Bedingung erfüllt ist. Merkwürdigerweise kann in der Anweisung auch irgendetwas anderes stehen, z.B. ... if (x.innerHTML = "Irgendwas") ... und trotzdem werden alle innerHTML zu "Sonderpreis" geändert. Es scheint also, dass die if-Bedingung gar nicht berücksichtigt wird.
 
Zurück