下面更新
我正在尝试以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
});
});
};