我在这里很新,刚刚发现了jQuery。 我有一个清单:
<ul id="tagcloud">
<li>Strategic Planning Process,Preparing for Changes,</li>
<li>Effective,Enrollment Managers,Effective Enrollment Managers,</li>
<li>Enrollment Program,</li>
<li>Next Generation,Diversity,Future enrollment,</li>
<li>Annual Admissions Plan,</li>
</ul>
现在,我想要做的是,用</li><li>
基本上替换所有“,”,当然,摆脱最后一个“,”不要空<li>
我想它会是这样的:
$('pre').html(function() {
return this.innerHTML.replace(",", "</li><li>");
});
但它不起作用。我可能错了......
答案 0 :(得分:6)
$('pre')
选择pre
元素。此外,replace
[docs]仅替换字符串的第一个出现,除非提供带有全局标志的正则表达式。
我猜你想要
$('#tagcloud').html(function(i, html) {
return html.replace(/,/g, "</li><li>");
});
或者,要不创建空的li
元素(如果逗号位于末尾会发生这种情况),您只能使用文本:
$('#tagcloud').html(function(i, html) {
return '<li>' + $(this).text().replace(/,/g, '</li><li>') + '</li>';
// or
// return '<li>' + $(this).text().split(',').join('</li><li>') + '</li>';
});
进一步阅读:
答案 1 :(得分:0)
Felix Kling的回答是用逗号替换列表项,但确实避免从最后一项的无关结束逗号创建空元素。此外,直接编辑HTML(使用DOM元素的innerHTML属性)可能比使用DOM操作函数更快,但AFAIK并不总是可靠/兼容(这里提到的简短示例http://api.jquery.com/html/),我建议使用元素。
尝试类似:
$('#tagcloud').each(function() {
var text = $(this).text();
if(text.substr(text.length - 1) == ',') {
$(this).text(text.substr(0, text.length - 2));
}
var items = text.split(',');
if(items.length > 1) {
$(this).text(text.substr(0, text.indexOf(',') - 1);
var newItems = [];
for(i = 1; i < items.length; i++) {
var newItem = document.createElement("li");
$(newItem).text(items[i]);
newItems.push(newItem);
}
$(this).after($(newItems));
}
}
只是把它写在我的头顶,但这样做是检查列表项的文本的最后一个字符是否是逗号,在这种情况下它被删除。然后创建一个由逗号分隔的文本数组,如果有任何额外的列表项要创建,它会将项目的文本剪切到第一个项目。然后,它从要创建的其余文本项构建DOM元素数组,并在第一个列表项后面插入它们。