我正在通过 JavaScript 将 BBCode 写入 HTML praser。我成功使用了 [b]、[i]、[img]、... 标签,但是使用[list]
标签,我不知道该怎么做,因为它的元素可能是 2、3、n、... 你能帮我从:
[list]
item 1
item 2
item 3
[/list]
到
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
<ul>
非常感谢你。
我正在通过 JavaScript 将 BBCode 写入 HTML praser。我成功使用了 [b]、[i]、[img]、... 标签,但是使用[list]
标签,我不知道该怎么做,因为它的元素可能是 2、3、n、... 你能帮我从:
[list]
item 1
item 2
item 3
[/list]
到
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
<ul>
非常感谢你。
如果您使用indexOf
,split
和substring
@Dai 正在谈论的那个可怕的组合,则类似于以下内容的东西会做到这一点。
var start = this.value.indexOf("[list]"),
ending = this.value.indexOf("[/list]"),
lines = this.value.substring(start + 7, ending - 1).split("\n");
//perform loop on `lines`:
// "<li>" + lines[i] + "</li>"
本质上,这将获得的起始位置,[list]
然后[/list]
获得其间的线。你会注意到在 中substring()
,我说start+7
and ending-1
。这可以通过以下事实来解释:实际行的起始位置将位于+字符串的实际长度+输入字符的索引处。[list]
[list]
末尾减一以删除该输入字符。一个更好的方法是简单地添加六个而不是七个开始,减去零,然后删除任何空数组值,但是,任何一种方式都可以,具体取决于您对用户的确切语法要求。
请记住,该lines
变量将保存在两个列表 bbcode 之间输入的所有行,这意味着您必须遍历它们,然后用<li></li>
标签包装它们。此外,我建议验证多项内容,例如确保start > ending
并多次执行此操作,以便您了解每一次的出现,[list]
而不仅仅是第一次。