如何使用jQuery将标签中的上一个,当前和下一个单词包装起来?

前端之家收集整理的这篇文章主要介绍了如何使用jQuery将标签中的上一个,当前和下一个单词包装起来?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
不确定标题是否选好……

我正在尝试模拟HTML / JS / CSS中的文本选择,以便在真正选择文本时摆脱移动设备上的动作气泡.

更具体地说,我试图避免这种情况:

视觉:

我构建它的方式可能会因为无关紧要而改变,因为所选文本被包装在span.selection中,并且在该标记内部,还有两个插入符号用作处理程序:

Lorem ipsum dolor                            <!-- Unselected Text -->

<span class="selection">                     <!-- Start selection wrapper -->

  <span rel="prevIoUs" class="caret"></span> <!-- The left-side caret -->

  sit amet,consectetur                      <!-- The selected texts -->

  <span rel="next" class="caret"></span>     <!-- The right-side caret -->

</span>                                      <!-- End selection wrapper -->

adipiscing elit.                             <!-- Unselected Text -->

理想情况下,使用拖放选项来选择更多或更少的文本会很有趣,但我相信这样做很难做到,在这种情况下,也许可以点击插入符选择前一个或后一个单词并将其包装在.selection中并不会那么糟糕.

这是jsfiddle:http://jsfiddle.net/m6Qx4/

周围的文本也可以包含HTML标签,例如:< i>,< b>,< span>和< ul> /< li>可能存在使解析更难.

有什么想法可以做到这一点?

状态更新:

我实际上设法使它与.click();事件监听器使用我的自定义jQuery方法.

最后,我将用jQuery UI draggable替换click事件,以便选择周围的单词,只要它可用于移动设备.

我目前的错误包括红色插入符号的重新定位.我试图摧毁它们并将它们添加/追加它们仍然无法正常工作.可能是Firefox的一个错误,在对文本节点进行更改后无法正确重新加载DOM?

参考:jsFiddle
要查看jsFiddle.net因最近停电而导致的运行情况,请访问他们的Tweets.

解决方法

一些想法:

我无法看到如何将所有内容包装在< span>中是一个可行的解决方案当你有这样的事情时会发生什么?

<p>The <b>important terms</b> will be bolded in this text</p>

当你选择The important时,你会有一些标签混乱,其中< span>标签的主体想要重叠< b>标签的身体.

我认为更好的解决方案是进行多项选择< span>具有相同类的标签.每次遇到HTML标记时,都会跳过标记并创建新选择< span>.然后,当您重新定位您的插入符号时,您只需执行以下操作:

$(".selection:first").prepend(startCaret);
$(".selection:last").append(endCaret);

我玩这个想法,它对我来说很好.如果你想得到真正的想象,你可以尝试合并选择< span> s,当你遇到相应的开始标记后找到一个结束标记,但这将是很多工作.

您的插入符号移动不正确,因为您指定了绝对定位样式.将其更改为亲属,并为每个插入符号提供一个& nbsp;.您将不得不使用其他一些定位CSS设置来使其看起来恰到好处,但它会随着您对这些更改的预期而移动(例如here).

当我正在为此做一些想法时,我尝试在插入符号上进行绝对定位,因此它们不必在选择范围内移动< span>.那是个错误.我遇到了没有任何标记溢出到新行的段落的问题.坚持您的选择< span>中的插入符号的想法.

最后,一些思考问题:

>你打算限制范围吗? (即,如果您开始在< p>标记内选择,则不允许选择将该标记外部溢出到下一个< p>或其他任何内容)
>某些标签是否无法选择? (即< table>,< script>,< select>等)

我认为这个想法非常酷,但它可能是一个非常庞大的项目.我会发布一些我试过的原型,当我让它们更加精致时.

猜你在找的jQuery相关文章