Учитывая следующие коды JavaScript, CSS и HTML:
console.log(getComputedStyle(document.querySelector('p'), '::after').getPropertyValue('content'));
p::after {
content: "Hello" attr(data-after);
}
<p data-after=" World"></p>
И Firefox, и IE11 возвращают необработанное значение, определенное в CSS: "Hello" attr(data-after)
, и это то, что мне нужно.
Но Chrome возвращает "Hello World"
, проанализированное значение.
Когда я использую Chrome DevTools для проверки элемента, я вижу, что на панели «Стили» отображается следующая информация:
p::after {
content: "Hello" attr(data-after);
}
Похоже, что в Chrome все еще есть возможность узнать исходное значение.
Есть ли какое-либо решение JavaScript, чтобы Chrome возвращал необработанное значение, определенное в CSS, как это делают Firefox и IE11? Даже эксклюзивный метод Chrome хорош, если его можно использовать в JavaScript.
Объясненная ситуация
В ответ на вопрос участника о причине, вот ситуация:
Я пытаюсь создать "polyfill" для CSS speak: never
на псевдоэлементах. Свойство speak
в настоящее время не поддерживается ни одним браузером.
CSS-псевдоэлементы могут быть прочитаны программами чтения с экрана, и в настоящее время невозможно легко скрыть их от программ чтения с экрана. Обычно подход к этой проблеме заключается в использовании HTML-кода, такого как <span aria-hidden="true">...</span>
, вместо удобных псевдоэлементов CSS и speak: never
, и, на мой взгляд, такой подход неудобен и разочаровывает.
Таким образом, это заполнение в основном относится к веб-доступности.
Для работы этого полифайла разработчикам CSS потребуется написать немного дополнительного кода CSS в качестве индикатора, например attr(speak-never)
:
p::after {
content: "please make me inaudible" attr(speak-never);
}
А затем в JavaScript полифильт перебирает каждый элемент на странице и проверяет, содержит ли его значение псевдоэлементов ::before
и ::after
свойство CSS content
attr(speak-never)
. Если эта строка индикатора найдена, тогда полифилл исправит псевдоэлементы (путем добавления пользовательских элементов <before aria-hidden="true">...</before>
и <after aria-hidden="true">...</after>
программно).
Теперь проблема в том, что Chrome не может вернуть указанное attr(speak-never)
в JavaScript. Хотя полифилл также может работать, требуя от разработчиков CSS добавления еще одного индикатора, такого как --speak: never
для Chrome, лучше, чтобы полифилл делал работы разработчиков CSS как можно более простыми и не требовал дополнительного индикатора --speak: never
.
Так вот почему этот вопрос был создан.
Update
Я решил использовать counter-reset: speak-never
в качестве индикатора вместо этого, потому что он может быть прочитан в JavaScript всеми браузерами.