我有一个字符串:<li>&File</li>
。我想要做的是分析li
元素内的字符串以找到&符号的位置。一旦找到,我想将下一个字符包裹在span
。
这背后的逻辑相对简单。获取&
的字符串位置,将其删除,然后在span
中包含以下字符(即字符串位置+ 1)。
有人可以在jQuery中建议一个合适的方法来包装字符串的单个字符吗?我知道可以包装一个HTML块,但是可以像这样处理字符串,还是创建自定义函数会更好?
我应该提到&
的位置也不会总是在字符串的开头。我正在考虑使用正则表达式来找到它的位置,因为我只想解析字符串中&符号的第一个第一次出现,从而使后来的出现不受影响。
&符号不一个HTML实体 - 它只是&
(而不是&
)。
最感激的任何帮助和见解......
答案 0 :(得分:2)
因为它是一个字符,所以你可以使用.replace
;不需要特殊的jQuery函数:http://jsfiddle.net/qr3pe/1/。
$("li").each(function() {
var html = $(this).html(), // this element's html
regexp = /&(.)/, // regexp (.html() returns & even
// if the source is &). `()` to capture.
match = regexp.exec(html); // get the captured character
if(!match) return; // no match; abort
var replaced = html.replace(regexp,
"<span>" + match[1] + "</span>");
$(this).html(replaced); // replace the html
});
答案 1 :(得分:1)
var text = $("li").text();
var location = text.indexOf("&");
if (location >= 0) { //if there is no &, location will equal -1
var character = "<span>"+text.slice(location+1,location+2)+"</span>";
text = text.slice(0,location)+character+text.slice(location+2);
}
如果你想要的话,你可能会把它全部放到一行,但我把它分开以便于阅读。
答案 2 :(得分:1)
var string = '<li>&File</li>';
var el = $(string);
el.html(el.text().replace(/&(.?)/, "<span>$1</span>"));
$(document.body).append(el);
答案 3 :(得分:1)
如果我正确地解释了您的问题,那么这应该有效。 (JsFiddle)
$(document).ready(function() {
var m = $('#test').html();
var n = m.indexOf('&') //Of course, you could simply use '&' here, everything else being same.
var spanLetter = m.substr(n+5, 1);
/* Note that '&' is represent as & in HTML and therefore, the logical, n+1 as start param will give 'a' as the result for spanLetter */
var restString = m.substr(n+6, n.length);
alert(n);
alert('<span>' + spanLetter + '<span>');
alert(restString);
});
答案 4 :(得分:1)
尝试按照:
$(function(){
$('ul>li:contains(&)').each(function(){
var text = $(this).text();
text = text.replace(/^&(\w){1}/, "<span>$1</span>");
$(this).html(text);
});
});
您可以看到示例here。
答案 5 :(得分:1)
这个怎么样?
function() {
$("li").each(
function() {
$(this).html($(this).text().replace(/&(.)/, '<span>$1</span>'));
}
);
}