Javascript 如何在两个元素之间定位文本
以下更新 我试图以模块元素的输出为目标,并向模块元素添加一些自定义事件和样式 Codemirror显示如下代码Javascript 如何在两个元素之间定位文本,javascript,jquery,codemirror,Javascript,Jquery,Codemirror,以下更新 我试图以模块元素的输出为目标,并向模块元素添加一些自定义事件和样式 Codemirror显示如下代码 <div><module type="content"></module><span>can contain other data</span></div> <pre> <span class="cm-tag"><div><mo
<div><module type="content"></module><span>can contain other data</span></div>
<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>
可以包含其他数据
在DOM中,它在一系列跨距之间进行渲染
divmodule
类型
=
“内容”
/模版
可以包含其他数据
/跨区/分区
我遇到的问题是试图为整个模块元素添加黄色背景,但由于“=”部分位于两个元素之间,我不确定如何使用选择器将其作为目标
这就是我现在看到的,但是因为它不包括元素之间的文本,所以背景颜色中有间隙
<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
});
});
};
$('.cm标记:包含(“”){
$closinglement=$(this.next();
返回false;
}
});
var$module=$(this.add($(this.nextUntil($closinglement));
$module.addClass('module');
});
有人对如何做到这一点有什么建议/想法吗
更新
通过使用wrapAll jquery方法,我在一定程度上实现了这一点,但可见结果仍然不太正确。现在,空格和相等字符将从包装的元素中删除并放置在其后面
==
函数hilightModules(){
$('.cm标记:contains(“如@Raminson所说,您可以将
标记作为目标,使背景覆盖整个部分。这就是您要查找的内容吗
就像@Raminson所说的,你可以将
标记作为目标,使背景覆盖整个部分。这就是你想要的吗
要将单击处理程序添加到内容文本中,最好只在CodeMirror包装器元素上注册一个mousedown处理程序,并在该处理程序中确定单击的内容是否是您要查找的内容。内容元素可能随时更改,并且您不想注册大量处理程序
至于突出显示内容,我建议使用覆盖模式(参见示例),而不是尝试使用DOM Mung(出于上面列出的原因).要将单击处理程序添加到内容文本,最好只在CodeMirror包装器元素上注册mousedown处理程序,并在该处理程序中确定单击的内容是否是您要查找的内容。内容元素可能随时更改,并且您不想注册大量处理程序
至于突出显示内容,我建议使用覆盖模式(参见示例),而不是尝试使用DOM Mung(出于上面列出的原因).如果为元素设置样式会发生什么?为什么不直接为
标记设置bg颜色?听起来输出有问题,这是什么样的嵌套元素?我已经更新了示例。同一行上可能有其他标准HTML标记,所以我不想更改整个标记的颜色。发生了什么ns如果您为元素设置了样式?为什么不直接为
标记设置bg颜色?听起来输出有问题,这是什么样的嵌套元素?我已经更新了示例。同一行上可能有其他标准HTML标记,所以我不想更改整个标记的颜色。问题是pre标记是每行和每行可能包含我不希望以这种方式突出显示的其他标准HTML标记。我将更新示例以显示这一点。问题是pre标记是每行的,每行可能包含我不希望以这种方式突出显示的其他标准HTML标记。我将更新示例以显示这一点。
<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
});
});
};