Atrribute von allen HTML Elements ändern

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Semiconductor.

    Atrribute von allen HTML Elements ändern

    Guten Tag liebe Community,

    ich habe folgendes Problem:

    VB.NET-Quellcode

    1. Dim fb_button As String = String.Empty
    2. For Each element As HtmlElement In WebBrowser1.Document.All
    3. If InStr(element.Name, "Umfrage") Then
    4. fb_button = element.Id
    5. WebBrowser1.Document.GetElementById(fb_button).SetAttribute("checked", "true")
    6. End If
    7. Next


    Leider wird durch diese Abfrage nur die aller erste Checkbox auf "True" gesetzt. Alle anderen Checkboxen mit derselben ID und unterschiedlichem value dagegen nicht.

    Wie lässt sich dieses Problem lösen?

    Vielen Dank und mit freundlichem Gruß

    Semiconductor schrieb:

    Alle anderen Checkboxen mit derselben ID
    Gibt es nicht (sollte es jedenfalls nicht geben. IDs sind als eindeutige Bezeichner zu verwenden. Was anderse ist IMHO Schwachsinn.

    Solche checkboxes sollten einen eindeutigen Bezeichner und einen Indexwert haben (also z.B:

    HTML-Quellcode

    1. <input id="umfrage-1" class="checkbox-umfrage" type="checkbox" name="Umfrage" value="Umfrage1" />
    2. <input id="umfrage-2" class="checkbox-umfrage" type="checkbox" name="Umfrage" value="Umfrage2" />
    3. <input id="umfrage-3" class="checkbox-umfrage" type="checkbox" name="Umfrage" value="Umfrage3" />
    4. <input id="umfrage-4" class="checkbox-umfrage" type="checkbox" name="Umfrage" value="Umfrage4" />
    5. <input id="umfrage-5" class="checkbox-umfrage" type="checkbox" name="Umfrage" value="Umfrage5" />
    6. <input id="umfrage-6" class="checkbox-umfrage" type="checkbox" name="Umfrage" value="Umfrage6" />


    Dann kannst du über WebBrowser1.Document.GetElementsByTagName("input").Cast(Of HtmlElement)().Where(Function(x) x.GetAttribute("className") = "checkbox-umfrage") alle Html Elemente raussuchen, die Checkboxen sind UND als Klassenbezeichnet den Wert "checkbox-umfrage" haben. Die kannst du dann über .ToList().ForEach(Sub(x) x.SetAttribute("checked", "true")) auf "ge-check-ed" setzen.

    Musst halt zuerst raufinden mit welchem Klassenbezeichnet die Checkboxen bezeichnet sind und dann den Code von mir für die Seite umschreiben.
    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Verstehe,

    die Checkboxen sehen aktuell so aus:

    Quellcode

    1. <input type="checkbox" name="Umfrage" id="Umfrage" style=""value="TEST2" class="checkboxField"/>
    2. <input type="checkbox" name="Umfrage" id="Umfrage" style=""value="TEST1" class="checkboxField"/>


    Könnte ich nicht theoretisch die Elements by value sortieren, weil das wäre in dieser Situation machbar? GetElementsbyID funktioniert ja nicht, wie du es erklärt hast.

    Semiconductor schrieb:

    die Elements by value sortieren, weil das wäre in dieser Situation machbar?
    Machbar schon - sinnvoll nicht.
    Edit: Was soll es dir deiner Meinung nach bringen, die Elemente über den Wert zu sortieren?

    Semiconductor schrieb:

    GetElementsbyID funktioniert ja nicht, wie du es erklärt hast.
    Ich gehe mal davon aus die Seite ist nicht von dir erstellt worden. Deswegen (auch wenn ich mich hier wiederhole): Schnapp dir einfach per GetByTagName("input") alle Input-Elemente, filtere mit LINQ und Where(Function(x) x.GetAttribute("className") == "Umfrage") alle Elemente, die als class Bezeichner "Umfrage" haben, mach per .ToList() eine Liste draus, die du dann per .ForEach(sub(x) x.SetAttribute("checked", "true")) durchlaufen kannst.

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell