2014-08-28 32 views
2

我有一个表单,我正在处理那个有点解开文本。我无法访问HTML文件,所以我能够选择它的唯一方法是通过Jquery(所以我被告知)。这是HTML的样子:如何使用jquery选择HTML/CSS中的解包文本?

<div class="input-entry"> 
<div class="input-area"> 
<div class="input-checkbox"> 
<input type="checkbox" name="accept"> 
I Accept 
</div> 
</div> 
</div> 

我需要选择“我接受”环绕它<label>。我不知道很多关于jQuery的,但我没有尝试这个办法:

$("div.input-area:contains('I Accept')").wrap("<label for='accept'></label>"); 

而且我认为他的第一眼会工作,但我怀念解释:contains选择做什么。

是否有可能使用Jquery简单包装它?

+0

编辑:对不起完全误读了这一点。尝试使用$(“dev.input-checkbox”)。innerText.wrap(“”) – RayGe 2014-08-28 13:40:51

回答

4

是的,它是可能的,你需要获得的内容,然后按节点类型过滤( nodeType'3'是文本节点):

$("div.input-checkbox:contains('I Accept')").contents().filter(function(){ 
    return this.nodeType === 3; 
}).wrap("<label for='accept'></label>"); 

我也改变了你的初始选择器。

http://jsfiddle.net/mb1yg111/

+0

工作完美,谢谢! – user2596635 2014-08-28 13:47:25

+0

不客气! – 2014-08-28 13:47:40

+0

这个小提琴不再工作。它包裹着div。我试图解决这个相同的问题。尝试包装未包装的文字。 – KingRichard 2015-05-27 21:08:22

1

也许不漂亮,但是你可以用这个实现它:

$(".input-checkbox").html(
    $(".input-checkbox").html().replace(
     'I Accept', 
     "<label for='accept'>I Accept</label>")); 

的jsfiddle演示:http://jsfiddle.net/lparcerisa/h98egbpv/

0

要选择的节点是文本节点。这有点不方便,但可能。你可以找到这个问题的详细说明:How do I select text nodes with jQuery?

简而言之:

$(elem) 
    .contents() 
    .filter(function() { 
    return this.nodeType === 3; //Node.TEXT_NODE 
    }); 
0

这可以通过以下操作来实现。您删除所有子节点,然后选取剩余的文本。

$('.input-checkbox').clone().children().remove().end().text() 

的jsfiddle http://jsfiddle.net/ux1bg1w9/1/

相关问题