2

我正在为我的论坛玩一些 bbcode,我偶然发现了一个关于多个嵌套引用的问题。我正在尝试在鼠标悬停时实现图像工具提示。

<a href="javascript:void;" onmouseover="tooltip.show(\'<img src=\1.jpg>\', 200);" onmouseout="tooltip.hide();">\1</a>',

\1是用户在 [img][/img] 标签之间输入的值。)

如您所见,我的 img src 周围没有引号。用嵌套引号表示这一点的正确语法是什么?我尝试使用反斜杠( \\" 等),但这不起作用。

有任何想法吗?

4

2 回答 2

4

一旦您停止在 HTML 中内联添加事件侦听器,您的所有报价(以及许多其他)问题都会消失。

HTML 是用来表示文本和多媒体数据的,它不应该包含内联的 CSS 和 JavaScript。

作为第一步,您可以重新组织您的代码,以便所有 JavaScript 都位于单独的文件中。

在 HTML 中:

<a class="bbcode-link" data-src="\1">\1</a>

<script src="script.js"></script>

script.js

function showTooltip(e) {
    var filename = e.target.getAttribute('data-src')
    return tooltip.show('<img src="' + filename + '.jpg" />', 200)
}

function hideTooltip() {
    return tooltip.hide()
}

[].forEach.call(
    document.querySelectorAll('a.bbcode-link'),
    function (link) {
        link.addEventListener('mouseover', showTooltip, false)
        link.addEventListener('mouseout', hideTooltip, false)
    }
)

另外,我希望您在将用户输入插入 HTML 之前对其进行清理。

参考链接:

于 2012-01-01T22:01:41.600 回答
1

This should work.

<a href="javascript:void;" 
onmouseover="tooltip.show('<img src=&quot;\1.jpg&quot;>', 200);"
onmouseout="tooltip.hide();">\1</a>',

Carefully check how I have used &quot; to prevent the browser from parsing the quotation to a attribute value delimiter. Also you dont have to escape ' character inside an attribute value.

jsfiddle

于 2012-01-01T21:23:06.087 回答