我需要使用'this'更改'#foo #three'的文本以获取div#one的文本
我需要的输出是:
HTML:
<div id="foo">
<div id="one">cat</div>
<div id="two">dog</div>
<div id="three">mouse</div>
</div>
JS:
$("#foo #three").text($(this).parent().children().first().text());
我动态地需要这段代码
答案 0 :(得分:3)
除非您尝试动态执行此操作,否则这很简单:
$('#three').text($('#one').text());
答案 1 :(得分:1)
$("#three").text($('#foo').children().first().text());
更新:如果你真的想用它来引用匹配,建议使用每个:
$("#foo #three").each(function(){ // this only matches #three
$(this).text($(this).parent().children().first().text());
})
答案 2 :(得分:0)
虽然这种方法使用了一种解决方法,但它有效:
$jSelect = $("#foo #three");
$jSelect.text( function(){
var jParts = $jSelect.selector.split(" ");
return $(jParts[0]).find("div:first").text();
});
但我不推荐它,因为jQuery 1.7中不推荐使用.selector
,并且仅在jQuery Migrate插件中支持live()
。
供参考:http://api.jquery.com/selector/
更新:采用类似方法而不使用.selector
:
jSelect = ("#foo #three");
$(jSelect).text( function(){
var jParts = jSelect.split(" ");
return $(jParts[0]).find("div:first").text();
});
答案 3 :(得分:0)
如果你坚持使用this
,你可以这样做:
的 Fiddle Example 强>
基本上,由于this
仅在函数上下文中起作用,因此您创建一个函数,该函数返回一个字符串并将其放在.text()
。
$(function () {
$("#foo #three").text(function () {
return $(this).parent().children().first().text();
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo">
<div id="one">cat</div>
<div id="two">dog</div>
<div id="three">mouse</div>
</div>