更新
我正在尝试定位codemirror的输出,并为模块元素添加一些自定义事件和样式。
Codemirror将显示以下代码。
<div><module type="content"></module><span>can contain other data</span></div>
在DOM中,它在一系列跨度之间呈现。
<pre>
<span class="cm-tag"><div><module</span>
<span class="cm-attribute">type</span>
=
<span class="cm-string">"content"</span>
<span class="cm-tag">></module><span></span>
can contain other data
<span class="cm-tag"></span></div></span>
</pre>
我遇到的问题是尝试在整个模块元素中添加黄色背景,但由于“=”部分位于两个元素之间,我不知道如何使用选择器来定位它。
这就是我现在所拥有的,但由于它不包含元素之间的文本,因此背景颜色中存在间隙。
$('.cm-tag:contains("<module")').each(function () {
var $closingElement;
$(this).nextAll().each(function () {
if ($(this).text() == "></module>") {
$closingElement = $(this).next();
return false;
}
});
var $module =$(this).add($(this).nextUntil($closingElement));
$module.addClass('module');
});
任何人都有关于如何实现这一目标的建议/想法?
更新 我能够通过使用wrapAll jquery方法获得部分方法,但可见结果仍然不太正确。现在,空格和相等的字符将从包装元素中删除并放在其后面。
<modulename"content"id"1234"/> = =
function hilightModules() {
$('.cm-tag:contains("<module")').each(function() {
var $module = $(this);
$(this).nextAll().each(function() {
$module = $module.add($(this));
// closing element
if ($(this).hasClass('cm-tag')) {
return false;
}
});
$module.wrapAll('<span class="module" />').click(function() {
// Do stuff
});
});
};
答案 0 :(得分:1)
要将点击处理程序添加到内容文本,最好的办法是在CodeMirror包装器元素上注册一个mousedown处理程序,并在该处理程序中确定所单击的内容是否是您要查找的内容。内容元素可能随时更改,您不希望注册大量处理程序。
至于突出显示的内容,我建议使用叠加模式(请参阅http://codemirror.net/demo/mustache.html作为示例),而不是尝试使用DOM修改(由于上面列出的原因)。
答案 1 :(得分:0)
就像@Raminson所说,你可以定位<pre>
标签,使背景跨越整个部分。这是你在找什么?