【问题标题】:jQuery - preceding node - no common parent nodejQuery - 前置节点 - 没有公共父节点
【发布时间】:2011-03-19 15:14:48
【问题描述】:

使用 jQuery 我想从给定节点中定位前一个节点。前面的节点和给定的节点可能没有相同的父节点!请检查以下片段:

<div class="container">
<div id="sec1">
    <p>Some text</p>
    <p><b>Some</b> text<</p>
    <p>Some <b>more</b> text</p>
</div>
<div id="sec2">
    <p>just a text</p>
</div>
<div id="sec3">
    <p>another <span id="cursorPos1"></span>text</p>
    <p><b>yet</b> another<span id="cursorPos2"></span> text</p>
</div>

假设当前给定节点是$("span#cursorPos1"),我要定位的是前面的粗体文本,那么结果应该是“&lt;b&gt;more&lt;/b&gt;”。这里,给定节点在div#sec3,目标前一个节点在div#sec1

如果当前给定节点是$("span#cursorPos2"),那么前面的粗体文本就是“&lt;b&gt;yet&lt;/b&gt;”。这里,给定节点和目标前一个节点都在同一个div#sec3中。

基本上,根本不应该考虑层次结构。选择器应该从给定的节点简单地找到前面的匹配项。

请告诉我如何做到这一点。

谢谢
斯里坎特

【问题讨论】:

    标签: jquery jquery-selectors jquery-traversing


    【解决方案1】:

    不是一个很好的解决方案,但我认为这可以解决问题。想法是找到所有粗体标签和光标元素,在结果数组中查找光标的位置,然后返回它之前的元素。

    只是把它放在一起,可能有更好的方法。如果你使用这个,一些错误检查可能也是为了。

    prevBold = function(myId) {
    
    var boldAndMe = $('#' + myId + ', b').toArray();
        var me = $('#' + myId).get(0);
        var myPos = boldAndMe.indexOf( me );
    
        return myPos > 0 ? $( boldAndMe[myPos-1] ) : null;
    
    }
    

    【讨论】:

    • 非常感谢。它工作正常,现在我将解决这个解决方案。
    猜你喜欢
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 2017-01-18
    相关资源
    最近更新 更多