提问人:Grasper 提问时间:8/14/2014 最后编辑:HuangismGrasper 更新时间:8/15/2014 访问量:380
最接近的 li 无跨度
Closest li without span
问:
我正在尝试创建一个选择器来抓取元素并显示文本。问题是在标签内我有标签,并且也显示出来。li
li
span
如何在没有某些元素的情况下抓取最接近元素的文本?
看到这里,我不希望包含“编辑”一词。http://jsfiddle.net/ozyf87tb/
<li>This is the story of the Jungle book
<form action="" method="" class="form_edit">
<textarea class="inte" value="" name="inte"></textarea>
</form>
<span class="edit">Edit</span>
</li>
$(".edit").click( function(ev) {
var a = $(this).closest('li').text();
$('.inte').val(a);
});
答:
3赞
Tacos
8/14/2014
#1
要执行要执行的操作,最易读的方法是用 之类的容器将文本括起来。因此,您可以使用其类选择确切的容器:DEMO<span class='myText'></span>
<li><span class='myText'>This is the story of the Jungle book</span>
<form action="" method="" class="form_edit">
<textarea class="inte" value="" name="inte"></textarea>
</form>
<span class="edit">Edit</span>
</li>
$(".edit").click( function(ev) {
var a = $(this).prevAll('.myText').text();
$('.inte').val(a);
});
评论
0赞
Grasper
8/14/2014
对不起,我无法修改html
2赞
George
8/14/2014
#2
使用并筛选您的选择以仅返回文本节点。然后,您需要做的就是修剪任何空格:contents()
var a = $.trim($(this).closest('li').contents().filter(function(){
return this.nodeType == 3;
}).text());
文档
评论
0赞
singe3
8/14/2014
太静态了,你不使用给定的类
0赞
George
8/14/2014
解释“太静态”?没有必要使用类,因为我提供的代码片段会在上下文中。
0赞
Grasper
8/14/2014
数字 3 是什么?
0赞
George
8/14/2014
这意味着该节点是文本节点。请参阅 MDN
1赞
George
8/14/2014
顾名思义,@singe31不是节点的位置,而是节点的类型。nodeType
3赞
filoxo
8/14/2014
#3
首先,获取 html 的 clone()。
var a = $(this).closest('li').clone();
然后删除无关的跨度。
a.find('span').remove();
然后将其放入文本区域。
$('.inte').val( a.text() );
这也可以重写为单个字符串,但会降低可读性。
var a = $(this).closest('li').clone().find('span').remove().end().text();
$('.inte').val( a );
评论
0赞
Grasper
8/14/2014
为什么先克隆李?
1赞
filoxo
8/14/2014
.clone()
创建您选择的 DOM 元素的副本,以便您可以在不实际引用页面元素的情况下使用它。否则,您将删除页面上显示的跨度。
5赞
Top Questions
8/14/2014
#4
http://jsfiddle.net/ozyf87tb/7/
克隆它(这样你就可以使用克隆,而不是在 DOM 中),获取子项,删除子项,获取文本。
$(".edit").click( function(ev) {
var a = $(this).closest('li').clone().children().remove().end().text();
$('.inte').val(a);
});
评论
0赞
Grasper
8/14/2014
我最喜欢这个,为什么它被否决了?
评论