簡體   English   中英

查詢選擇器屬性值以空字符串開頭失敗

[英]Query selector attribute value starts with empty string fails

誰能解釋以下內容為何返回空列表的原因:

var el = document.createElement('div');
el.dataset.mydata="hello";
document.body.appendChild(el);
document.querySelectorAll('div[data-mydata^=""]');

(如果您想知道為什么要這樣做,那么實際的代碼就是使用變量作為querySelector中的屬性值。它所包含的函數被遞歸調用,在第一次運行時,該變量為空。)

發生這種情況是因為子字符串匹配的屬性選擇器很笨

[att^=val]

表示一個具有att屬性的元素,其值以前綴“ val”開頭。 如果“ val”是空字符串,則選擇器不代表任何內容。

(強調我的。)

所有子字符串選擇器都被設計破壞:給定空字符串時,它們不返回任何內容(而不是匹配所有字符串)。 我不知道為什么,但這就是選擇器規范所說的。

最好的解決方法可能是在代碼中添加一個檢查,指出如果var為空,請改用'div[data-mydata]' (即僅檢查屬性是否存在,而不檢查其值)。

您應該實現以下條件:如果值為空,則在選擇器中使用=運算符;如果值不為空,則使用^=運算符。

嘗試運行以下代碼段

 var el = document.createElement('div'); var value = ""; el.dataset.mydata = value; document.body.appendChild(el); var elements = document.querySelectorAll(`div[data-mydata${value ? "^": ""}=""]`); console.log(elements.length); 

暫無
暫無

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM