Удаление пробелов из функции JavaScript «copy-clipboard» для Chrome / Safari - PullRequest
0 голосов
/ 18 ноября 2009

У меня есть значок буфера обмена на веб-сайте, который при нажатии вызывает следующий 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 наружу, и вот, это сработало. Мой код удаляет пробелы, как и ожидалось.

Кто-то должен объяснить мне, как это происходит, или это известная проблема. Или, может быть, нужным людям связаться.

Ответы [ 2 ]

0 голосов
/ 18 ноября 2009

Вы пытались заменить \xA0 на  ?

0 голосов
/ 18 ноября 2009

Я не совсем уверен, что это регулярное выражение должно делать .. Можете ли вы уточнить это?

Если вы просто хотите сконцентрировать пробел, все будет в порядке:

 content = content.replace(/\s+/g,' ');
...