2017-09-13 30 views
1

我正在用一個臨時電子郵件地址讀入一個文本文件,並讓這個片段構建了一個HTML鏈接。如何在網頁上多次使用由JavaScript生成的類?

<script> 
//<![CDATA[ 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
     if (xhttp.readyState == 4 && xhttp.status == 200) { 
     document.getElementsByClassName('temporary_email')[0].innerHTML = "<a href=\"mailto:" + xhttp.responseText + "\">Email</a>"; 
     } 
    }; 
    xhttp.open("GET", "/temporary_email.txt", true); 
    xhttp.send(); 
//]]> 
</script> 

整個事情按預期工作,我可以公正的地方<span class="temporary_email"></span>任何地方獲得一個鏈接。

問題:看來我只能抓取這一次;如果我的身體中有mailto:鏈接,而另一個鏈接在我的頁腳中,則腳本將不起作用。所以,我認爲這實際上不是一個變量,而我作爲JS noob是真正的問題。

PS:我試圖避免jQuery。嘗試了幾個虛擬替代方法,如複製腳本併爲document.getElementsByClassName指定另一個名稱,但沒有任何內容。基本上我正在進行一個快速和骯髒的修復,直到我知道足夠的JavaScript來正確執行此操作。

回答

2

原因你只得到追加到類名匹配的第一個實例的JS,就是因爲document.getElementsByClassName()返回數組的匹配元素。

通過使用document.getElementsByClassName('temporary_email')[0],你只會選擇第一個匹配的元素。

你需要更新到下面的代碼:

var xhttp = new XMLHttpRequest(); 

    xhttp.onreadystatechange = function() { 

      if (xhttp.readyState == 4 && xhttp.status == 200) { 
       var elements = document.getElementsByClassName('temporary_email'); 

       for (var i = 0; i < elements.length; i++) { 
        elements[i].innerHTML = "<a href=\"mailto:" + xhttp.responseText + "\">Email</a>"; 
       } 
      } 
    }; 
    xhttp.open("GET", "/temporary_email.txt", true); 
    xhttp.send(); 

Here's一個基本的小提琴。

通過這種方式,您可以遍歷數組,並且每個數組都可以根據需要更改innerHTML。另外,沒有jQuery!

0

你可以遍歷您temporary_email鏈接和更新它們:

Array.from(document.getElementsByClassName('temporary_email')) 
    .forEach(function(el){ 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
     if (xhttp.readyState == 4 && xhttp.status == 200) { 
     el.innerHTML = "<a href=\"mailto:" + xhttp.responseText + "\">Emai l</a>"; 
    } 
    }; 
    xhttp.open("GET", "/temporary_email.txt", true); 
    xhttp.send(); 
    }) 
+0

感謝您的迅速回復。我真的不知道哪個答案更好,但我給了G.Hunt一個信用,因爲他有點快,並且在他的評論中更多地解釋了發生的事情。儘管如此,你還是很喜歡。在決定將它發佈在這裏之前,我花了幾個小時擺弄這個問題。 – pattulus

相關問題