У меня есть значок буфера обмена на веб-сайте, который при нажатии вызывает следующий JavaScript (среди прочего):
var hasInnerText = (document.getElementsByTagName("body")[0].innerText != undefined) ? true : false;
var elem = document.getElementById(codeID);
var content;
// strip out all html tags and just get the text
if (!hasInnerText) {
content = elem.textContent;
content = content.replace(/\xA0/g,' ');
}
else { // ie check
content = elem.innerText;
}
Это прекрасно работает в IE и Firefox, но не в Safari и Chrome. Я предполагаю, что это как-то связано с их природой "Webkit". В итоге происходит то, что я получаю искаженные пробелы. Я не могу объяснить это по-другому. Копия буфера обмена предназначена для примеров кода, а в IE и Firefox скопированный код компилируется. В Safari / Chrome это не так.
Я предполагаю, что content.replace
выполняется неправильно. Есть ли другой, более подходящий RegEx, которым я должен заниматься?
Заранее спасибо!
РЕДАКТИРОВАТЬ: я исправил проблему. Существует ОЧЕНЬ странная проблема, в которую я не могу поверить, что она осталась незамеченной для Chrome / Safari (может, что-то с моей стороны?).
Я попытался сделать простое предупреждение:
// strip out all html tags and just get the text
if (!hasInnerText) {
content = elem.textContent;
alert(content);
content = content.replace(/ /g,' ');
}
Что по какой-то кровавой причине не сработало в Chrome / Safari. НО, когда я извлек это предупреждение за пределы оператора if, оно ДЕЙСТВИТЕЛЬНО сработало. Следуя этой мысли, я тоже вытащил content.replace
наружу, и вот, это сработало. Мой код удаляет пробелы, как и ожидалось.
Кто-то должен объяснить мне, как это происходит, или это известная проблема. Или, может быть, нужным людям связаться.