如果你不知道這是爲什麼不工作在IE,這裏是the MSDN documentation on that function:
當您使用getElementsByName方法,具有指定NAME屬性或ID文檔中的所有元素屬性值被返回。
支持NAME屬性和ID屬性的元素包含在getElementsByName方法返回的集合中,但具有NAME expando的元素不包含在集合中;因此,此方法不能用於按名稱檢索自定義標籤。
Firefox允許getElementsByName()
檢索使用NAME expando的元素,這就是它工作的原因。不管這件事是否是一件好事™都可能引起爭議,但這是事實。
因此,一種選擇是使用getAttribute()
DOM方法來詢問NAME屬性,然後測試值以查看它是否是您想要的值,如果是,則將其添加到數組中。但是,這需要您遍歷頁面中的所有節點,或者至少在一個子節點內進行迭代,這不是最有效的。也許你可以事先約束這個列表,使用getElementsByTagName()
等。
如果您控制頁面的HTML,則另一種方法是爲所有感興趣的元素提供一個僅根據數字而不同的Id。:
<div id="Change0">...</div>
<div id="Change1">...</div>
<div id="Change2">...</div>
<div id="Change3">...</div>
然後有JavaScript的是這樣的:
// assumes consecutive numbering, starting at 0
function getElementsByModifiedId(baseIdentifier) {
var allWantedElements = [];
var idMod = 0;
while(document.getElementById(baseIdentifier + idMod)) { // will stop when it can't find any more
allWantedElements.push(document.getElementById(baseIdentifier + idMod++));
}
return allWantedElements;
}
// call it like so:
var changes = getElementsByModifiedId("Change");
這是一個黑客,當然,但它會做你需要的工作,不要太低效比較一些其他黑客。
如果您正在使用某種形式的JavaScript框架/工具包,你的選擇是好多了,但我沒有時間去進入這些細節,除非你知道你使用了一個。就我個人而言,我不知道人們如何生活沒有一個人,他們節省了太多的時間,精力和沮喪,以至於無法承擔使用而不是。
好,謝謝。該頁面在這裏(http://lwww.dege.ukfsn.org/encrypt/decode.php),它是通過字母頻率分析對代碼進行破解的簡單例證。在IE中輸入字母時,您可能需要點擊標籤。在FF中,回報也是如此。 – sa386 2008-11-10 18:39:29
謝謝。改爲課堂是很好的解決方案 – sa386 2008-11-10 19:47:44
起初,我不認爲這在我的IE 11或IE 8中都能正常工作,但是我的大小寫在.getElementById()中的'Id'上不正確。我犯了這麼多錯誤!但在修復*我自己的*錯誤後,IE 8和IE 11都能很好地工作。感謝您提供的最佳解決方案!如果只有IE瀏覽器的工作,以及其他瀏覽器!我希望Edge不會那麼糟糕。時間會證明。 – 2016-01-19 22:27:26