Что лучше всего кросс-браузер для обрезки элемента innerHTML
?
jsFiddle: http://jsfiddle.net/6hk8z/Каков наилучший способ кросс-браузера обрезать элемент innerHTML?
ответ
Я предполагаю, что вы сбиты с толку код
html, который не является пробелом, а просто отображается как таковой браузером. См настроенную реализации ниже:
String.prototype.trimmed = function(){
return this.replace(
/^(\s| |<br\s*\/?>)+?|(\s| |<br\s*\/?>)+?$/ig, ' '
).trim();
}
обновленный jsFiddle
Хорошо, но попробуйте удалить текст в div и вставить 3 пробела. Затем нажмите на div. – user2719515
Я не уверен, что вы получаете, если вы обрезаете строку, содержащую только пробелы, вы получаете пустую строку. – Emissary
Не перезаписывайте собственный метод 'String.prototype.trim'! – Bergi
Вы пробовали JQuery-х $.trim()
? См. JQuery documentation для более подробной информации.
Вопрос не предусматривает jQuery - совершенно ненужно. – Emissary
плюс скрипка показывает, что загружен jquery. –
Используйте DOM, не innerHTML
, которые вам нужно будет разобрать.
function trimContents(element) {
function iterate(start, sibling, reg) {
for(var next, c = element[start]; c != null; c=next) {
next = c[sibling];
if (c.nodeType == 1 && c.nodeName.toLowerCase() == "br"
|| c.nodeType == 3 && !(c.nodeValue = c.nodeValue.replace(reg, "")))
element.removeChild(c);
else
break;
}
}
iterate("firstChild", "nextSibling", /^\s+/);
iterate("lastChild", "previousSibling", /\s+$/);
}
Хорошо: ........ Это определенно делает тонны смысла: o – iConnor
это на самом деле довольно аккуратно, но он работает только при первом щелчке для меня (хром) - я никогда не беспокоился о 'contenteditable'; кажется, имеет некоторое причудливое поведение (добавление нагрузок div). – Emissary
@Emissary: Вы хотите, чтобы он также удалял пустые divs? – Bergi
Что вы подразумеваете под "урезать"? – Bergi
Trim - полоса пробела с начала и конца строки. – user2719515
Что это связано с 'innerHTML'? В строке примера скрипта нет даже пробела. – Bergi