2012-06-05 59 views
0

我发现How do I select text nodes with jQuery?但我的问题是,虽然我可以去喜欢使用jquery查找文本节点?

$(elem) 
    .contents() 
    .filter(function() { 
    return this.nodeType == Node.TEXT_NODE; 
    }).each(function() { 
    this.nodeValue = //stuff 
    }); 

我试图找出我怎么能与beforeafter节点结合this.nodeType因为有些东西我需要可以表现为this.nodeValue + before,this.nodeValuethis.nodeValue + after的组合是否合理,我需要测试每个节点的值以及它与前一个和下一个的结合吗?

+0

发布一个示例标记代码,了解您如何拥有它以及期望的结果,解释您正在尝试执行的操作。 –

回答

0

如果我理解正确,当您点击文本节点时,您想要获得prev和接下来的node。见下文,

var elContents = $('#test').contents(); 
elContents.each(function(idx, el) { 
    if (el.nodeType == 3) { 
     if (idx == 0) { 
      prev = null; 
      next = elContents.get(idx + 1); 
     } else if (idx == elContents.length - 1) { 
      prev = elContents.get(idx - 1); 
      next = null; 
     } else { 
      next = elContents.get(idx + 1); 
      prev = elContents.get(idx - 1); 
     } 

     //below is demo code 
     $('#result').append ("<b>Prev: </b>" + $(prev).text() + " <b>Cur: </b>" + $(el).text() + "<b> Next: </b>" + $(next).text() + '<br />'); 
    } 
}); 

DEMO:http://jsfiddle.net/SFmRR/

注:在演示中,里面的div元素没有任何额外的空间/换行符,因为当你遍历contents()它包括线作为textNode打破和空间。

+0

@Andy它是相同的,除了你通过jQuery而不是手动迭代器传递给你'index'和'element'。 –