簡體   English   中英

為什么我們在我指定的代碼中寫 [0] ?

[英]why do we write [0] in the code which i specified?

我們為什么要寫(item.classList[0] === "complete-btn")

比如什么是"item.classList[0]" ,為什么這里是 0 [0]?

if(item.classList[0] === "complete-btn"){
        const todo = item.parentElement;
        todo.classList.toggle("completed"); 
     }  
}

classList是元素上DOMTokenList名稱的 DOMTokenList。 您可以像使用 arrays 一樣對列表進行索引,以訪問列表中的各個令牌(在本例中為類)。 例如,如果你有class="abc" ,那么.classList[0]"a".classList[1]"b".classList[2]"c" 但是,請繼續閱讀。

問題中代碼的作者認為查看列表中的第一個class 是否為complete-btn是有意義的。 這是一種不好的做法,因為 class 列表中的類順序並不重要,並且可以隨着從列表中添加和刪除類而改變。¹因此,最好使用contains編寫:

if (item.classList.contains("complete-btn")) {

對於帶有class="example complete-btn"的元素,原始代碼會失敗,而使用contains的代碼不會:

 const item = document.querySelector(".example"); console.log(item.classList[0] === "complete-btn"); // false, [0] is "example" console.log(item.classList.contains("complete-btn")); // true
 <div class="example complete-btn"></div>


¹ “這是一種不好的做法,因為 class 列表中的類順序並不重要,並且隨着從列表中添加和刪除類,它可能會發生變化。” Granted, if complete-btn is the first class listed in the class attribute of the HTML and that class is never removed via .classList.remove or .classList.toggle , it will remain the first in the list; still, it's poor practice to rely on it, not least because someone maintaining the HTML could add another class at the beginning, not realizing the JavaScript was relying on order — because in general, there is no order to the classes in class .

item.classlist返回一個 DOMTokenList Object ,它就像一個數組,其中包含所有類。 在這里,我們從數組中訪問它的第一個 class,這就是為什么為 0。

為什么使用 AJAX 返回的 Javascript 代碼未寫入指定的<div> ,但它會替換整個頁面?</div><div id="text_translate"><p> 我用 AJAX(使用 jQuery)請求一個包含 Javascript function 調用 Apache+PHP 服務器的標簽。 這是 HTML 和 AJAX 代碼:</p><pre> &lt;.DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1:1//EN" "http.//www.w3.org/TR/xhtml11/DTD/xhtml11:dtd"&gt; &lt;html xmlns="http.//www.w3:org/1999/xhtml"&gt; &lt;head&gt; &lt;script type="text/javascript" src="http.//localhost/LivingLab/javascript/jquery.min:js"&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;a href="javascript. void(0)" onclick=" $:post( 'http.//localhost/test,php': // server target page {some_var, 'abc'}. // data to be sent via POST method function(data) { // JS callback function $('#container');html(data); // innerHTML of &lt;div id="container"&gt; will be replaced } ) "&gt;Click me!&lt;/a&gt; &lt;div id="container"&gt;&lt;/div&gt; &lt;/body&gt; &lt;/html&gt;</pre><p> AJAX 請求具有以下 PHP 代碼的頁面“http://localhost/test.php”:</p><pre> &lt;?php echo '&lt;script type="text/javascript"&gt; document.write("Javascript output"); &lt;/script&gt;'; ?&gt;</pre><p> 當我點擊鏈接時,在 AJAX 請求之后,整個頁面被“Javascript 輸出”替換,而不是僅在 id 為“容器”的 div 標記內寫入。</p><p> 如果 PHP 服務器腳本寫入其他內容,而不是像這樣的腳本標記:</p><pre> &lt;?php echo 'text'?&gt;</pre><p> AJAX 調用行為正常,通過將 div 替換為 id“容器”而不是整個頁面。</p><p> 我嘗試使用 Wireshark 調查此頁面傳輸的 HTTP 數據,它似乎不是 HTTP 問題,因為服務器響應正是它應該的樣子:</p><pre> &lt;script type="text/javascript"&gt; document.write("Javascript output"); &lt;/script&gt;</pre><p> 在沒有 AJAX 的情況下運行 Javascript 代碼不會替換整個頁面,僅當使用 AJAX 返回腳本標記時才會發生這種情況。 A 注意到 Firefox 3 和 5 以及 Google Chrome 中的相同行為。</p><p> 為什么會這樣?</p></div>

[英]Why a Javascript code returned with AJAX doesn't write in a specified <div>, but it replaces the whole page?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 如何編寫這樣的onclick代碼以使我能夠進行分析? 我們為什么要寫窗口。 為什么這是有效的代碼,我們稱之為什么 為什么我們在XMLHttpRequest中編寫send()之前編寫onload()函數 當我可以在客戶端代碼中逐字編寫規則時,有人可以向我解釋為什么我們需要 Firebase 安全規則嗎? 如何在瀏覽器中編寫代碼執行器 為什么我們要在不同的文件中重構 Node.js 代碼 為什么我們要以 express 形式返回狀態碼和響應? 如何循環指定代碼區域以編譯 Javascript 中的數據? 為什么使用 AJAX 返回的 Javascript 代碼未寫入指定的<div> ,但它會替換整個頁面?</div><div id="text_translate"><p> 我用 AJAX(使用 jQuery)請求一個包含 Javascript function 調用 Apache+PHP 服務器的標簽。 這是 HTML 和 AJAX 代碼:</p><pre> &lt;.DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1:1//EN" "http.//www.w3.org/TR/xhtml11/DTD/xhtml11:dtd"&gt; &lt;html xmlns="http.//www.w3:org/1999/xhtml"&gt; &lt;head&gt; &lt;script type="text/javascript" src="http.//localhost/LivingLab/javascript/jquery.min:js"&gt;&lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;a href="javascript. void(0)" onclick=" $:post( 'http.//localhost/test,php': // server target page {some_var, 'abc'}. // data to be sent via POST method function(data) { // JS callback function $('#container');html(data); // innerHTML of &lt;div id="container"&gt; will be replaced } ) "&gt;Click me!&lt;/a&gt; &lt;div id="container"&gt;&lt;/div&gt; &lt;/body&gt; &lt;/html&gt;</pre><p> AJAX 請求具有以下 PHP 代碼的頁面“http://localhost/test.php”:</p><pre> &lt;?php echo '&lt;script type="text/javascript"&gt; document.write("Javascript output"); &lt;/script&gt;'; ?&gt;</pre><p> 當我點擊鏈接時,在 AJAX 請求之后,整個頁面被“Javascript 輸出”替換,而不是僅在 id 為“容器”的 div 標記內寫入。</p><p> 如果 PHP 服務器腳本寫入其他內容,而不是像這樣的腳本標記:</p><pre> &lt;?php echo 'text'?&gt;</pre><p> AJAX 調用行為正常,通過將 div 替換為 id“容器”而不是整個頁面。</p><p> 我嘗試使用 Wireshark 調查此頁面傳輸的 HTTP 數據,它似乎不是 HTTP 問題,因為服務器響應正是它應該的樣子:</p><pre> &lt;script type="text/javascript"&gt; document.write("Javascript output"); &lt;/script&gt;</pre><p> 在沒有 AJAX 的情況下運行 Javascript 代碼不會替換整個頁面,僅當使用 AJAX 返回腳本標記時才會發生這種情況。 A 注意到 Firefox 3 和 5 以及 Google Chrome 中的相同行為。</p><p> 為什么會這樣?</p></div>
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM