Пропустить некоторые теги с функцией stripTags () в prototypejs - PullRequest
0 голосов
/ 06 января 2012

Я успешно реализовал немного кода, который удаляет весь HTML из вставленной строки с помощью stripTags ().Моя следующая цель - пометить несколько тегов белыми флагами, чтобы они игнорировались в событии 'paste', используя .wrap () для дополнения функции.

Я использую prototype.js в качестве фреймворка и медленноя работал над растущей болью в изучении как фреймворка, так и javascript, но эта проблема была немного препятствием.

Я немного погуглил и нашел то, что похоже на два отличных решения, но я некажется, не реализует их правильно. Найденные решения: http://perfectionkills.com/wrap-it-up/ (функция для указания тегов для удаления) и http://pastebin.com/xbymCFi9 (функция для сохранения тегов)

Я в значительной степени скопировал и вставилот последнего.Если я извлекаю 'br' из кода, то регулярное выражение игнорируется, и весь html удаляется.Если я оставлю это, ничего не будет вставлено.

Вот то, что я собрал воедино (и я чувствую себя глупо из-за того, что не могу понять это!).

</p> <pre><code>String.prototype.stripTags = String.prototype.stripTags.wrap( function(proceed, allowTags) { if (allowTags) { if (Object.isString(allowTags)) allowTags = $w(allowTags) this.gsub(/(<\/?\s*)([^\s>]+)(\s[^>]*)?>/, function(match) { if (allowTags.include(match[2].toLowerCase())) return match[1] + match[2] + match[3] + '>' }) } else { // proceed using the original function return proceed(); } }); WysiHat.Commands.promptLinkSelection = function() { if (this.linkSelected()) { if (confirm("Remove link?")) this.unlinkSelection(); } else { var value = prompt("Enter a URL", "http://www.alltrips.com/"); if (value) this.linkSelection(value); } } document.on("dom:loaded", function() { var editor = WysiHat.Editor.attach('event_desc'); var toolbar = new WysiHat.Toolbar(editor); editor.observe("paste", function(event) { var el = $(this); setTimeout(function() { var pText = el.innerHTML.stripTags('br'); //alert(pText); $('event_desc_editor').update(pText); $('event_desc').setValue(pText); }, 0); });

(Вы можете распознать код WysiHat из текстового редактора 37Signals)

примечание: вы можете увидеть закомментированное предупреждениеиз.Если я предупреждаю ptext, я получаю 'undefined'.

1 Ответ

0 голосов
/ 07 января 2012

Итак, я разочаровался и перешел к решению регулярных выражений:

el.innerHTML.replace(/<(?!\s*\/?\s*p\b)[^>]*>/gi,'')
...