Ich habe das folgende HTML:
<div id="box2">
<p> this is some text and here is DAY 3 cool right </p>
<!-- In the previous line, change DAY to something else -->
</div>
<br>
<select id="field"></select>
Das folgende korrekte Javascript füllt die Auswahl-Dropdown-Liste aus, wenn die Regex-Operation "Übereinstimmung" eine Übereinstimmung findet. Wenn ich jedoch den Wert von "Tag" in "Nacht" ändere, stoppt das gesamte Skript. Das Alarmfeld wird nicht ausgelöst. Fehlt ein Schritt?
var TextToSearch = document.getElementById('box2').innerHTML;
var result = TextToSearch.match(/DAY.*?</gi);
var select = document.getElementById("field");
if(result.length)
{
for(var i = 0; i < result.length; i++)
{
var option = document.createElement("option");
option.value = i+1;
option.innerHTML = result[i];
select.add(option);
}
}
alert("test");
Hier ist eine Geige: https://jsfiddle.net/uooeLk2c/1/
4 Antworten
Uncaught TypeError: Cannot read property 'length' of null
Stellen Sie sicher, dass Sie den Wert von result
überprüfen, bevor Sie versuchen, die Eigenschaft .length
abzurufen.
.match
gibt null
zurück, wenn keine Übereinstimmung vorliegt.
Ändern Sie if(result.length)
für if(result !== null)
.
Ich denke so etwas sollte reichen ...
if (typeof result !== 'undefined' && result && result.length)
{
/* your code here*/
}
Sie können OR ||
verwenden, wenn keine Übereinstimmung vorliegt. match()
gibt null
zurück, wenn keine Übereinstimmung gefunden wird. Wenn Sie length
für null
verwenden, wird ein Fehler ausgegeben.
Sie können ||
verwenden, um ein leeres Array zurückzugeben, wenn keine Übereinstimmung vorliegt.
var result = TextToSearch.match(/NIGHT.*?</gi) || [];
Auf diese Weise stellen Sie sicher, dass result
unabhängig vom Status von match()
immer ein array
ist.
var TextToSearch = document.getElementById('box2').innerHTML;
var result = TextToSearch.match(/DAY.*?</gi) || [];
var select = document.getElementById("field");
if (result.length) {
for (var i = 0; i < result.length; i++) {
var option = document.createElement("option");
option.value = i + 1;
option.innerHTML = result[i];
select.add(option);
}
}
alert("No Error");
<div id="box2">
<p>this is some text and here is night 3 cool right</p>
<!-- In the previous line, change DAY to something else -->
</div>
<br>
<select id="field"></select>
Sie müssen die Länge nicht überprüfen.
Überprüfen Sie einfach, ob die Variable vorhanden ist:
if (result) {