highlight html strings without breaking tags
This commit is contained in:
parent
fd96423266
commit
9568acd592
2 changed files with 28 additions and 2 deletions
|
@ -177,7 +177,7 @@ Ox.Editable = function(options, self) {
|
|||
value = self.options.format(self.options.value)
|
||||
}
|
||||
if (self.options.highlight) {
|
||||
value = Ox.highlight(value, self.options.highlight, 'OxHighlight');
|
||||
value = Ox.highlightHTML(value, self.options.highlight, 'OxHighlight');
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
|
|
@ -62,6 +62,32 @@ Ox.highlight = function(txt, str, classname) {
|
|||
) : txt;
|
||||
};
|
||||
|
||||
/*@
|
||||
Ox.highlightHTML <f> Highlight matches in a html string
|
||||
> Ox.highlight('<a href="foobar">foobar</a>', 'foo', 'match')
|
||||
'<a href="foobar"><span class="match">foo</span>bar</a>'
|
||||
@*/
|
||||
Ox.highlightHTML = function(txt, str, classname) {
|
||||
var i = -1,
|
||||
result = '',
|
||||
value = txt.toLowerCase();
|
||||
str = str.toLowerCase();
|
||||
while (txt.length) {
|
||||
if ((i = value.indexOf(str, i + 1)) < 0) {
|
||||
result += txt;
|
||||
txt = '';
|
||||
} else if (value.lastIndexOf('>', i) >= value.lastIndexOf('<', i)) {
|
||||
result += txt.substring(0, i)
|
||||
+ '<span class="' + classname + '">'
|
||||
+ txt.substr(i, str.length) + '</span>';
|
||||
txt = txt.substr(i + str.length);
|
||||
value = txt.toLowerCase();
|
||||
i = -1;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
/*@
|
||||
Ox.isValidEmail <f> Tests if a string is a valid e-mail address
|
||||
(str) -> <b> True if the string is a valid e-mail address
|
||||
|
@ -488,4 +514,4 @@ Ox.wordwrap = function(str, len, sep, bal, spa) {
|
|||
});
|
||||
}
|
||||
return Ox.trim(lines.join(sep));
|
||||
};
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue