2

我正在通过 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>

非常感谢你。

4

1 回答 1

1

如果您使用indexOf,splitsubstring@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+7and ending-1。这可以通过以下事实来解释:实际行的起始位置将位于+字符串的实际长度+输入字符的索引处。[list] [list] 末尾减一以删除该输入字符。一个更好的方法是简单地添加六个而不是七个开始,减去零,然后删除任何空数组值,但是,任何一种方式都可以,具体取决于您对用户的确切语法要求。

请记住,该lines变量将保存在两个列表 bbcode 之间输入的所有行,这意味着您必须遍历它们,然后用<li></li>标签包装它们。此外,我建议验证多项内容,例如确保start > ending并多次执行此操作,以便您了解每一次的出现,[list]而不仅仅是第一次。

于 2012-09-24T02:22:58.020 回答