jQuery的wrap和appendTo没有达到预期的结果
jQuery wrap and appendTo doesn't lead in expected result
我试图在div容器内包装一些HTML内容,然后将span附加到该容器。但是我不明白为什么附加的span没有出现。
所以我很好奇我是否做错了什么。
$('button').click(function() {
var $container = $('<div class="container"></div>');
$('.target').wrap($container);
$label = $('<span class="duration-label">Hi there</span>');
$label.appendTo($container);
});
.target {
border: 1px solid black;
}
.container {
background: red;
padding: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class="target">
<span>This is some unimportant text</span>
</div>
<button type="button">Click me</button>
这是因为wrap
使复制的包装你给它,它不使用你直接给它的一个。你在附加你给它的。
请使用内容周围的字符:
$('button').click(function() {
// Wrap .target with the div, and get a reference to
// the newly-created wrapper
var $container =
$('.target')
.wrap('<div class="container"></div>')
.parent();
// Add a label to it
var $label = $('<span class="duration-label">Hi there</span>');
$label.appendTo($container);
});
.target {
border: 1px solid black;
}
.container {
background: red;
padding: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class="target">
<span>This is some unimportant text</span>
</div>
<button type="button">Click me</button>
旁注:你的代码被隐式全局变量的恐怖所折磨,因为你没有声明$label
。声明变量是很重要的。你可以使用严格模式让JavaScript引擎阻止你隐式地创建全局变量。
这是因为$container
指的是变量而不是被包装元素的对象。您需要获取对象或使用相关选择器附加到容器元素:
$label.appendTo('.container');
演示工作原因是.wrap()
方法将匹配元素集中的每个元素用一个新的元素结构- $container
的副本包装。
$container
本身不是包装元素,它只是一个用于包装元素的"模板",所以如果你想进一步操作它们,你需要获取实际的元素。
这当然很容易理解,只要你考虑到在调用之后可以有不止一个这样的元素。
$('button').click(function() {
var $container = $('<div class="container"></div>');
var $wrappingContainer = $('.target').wrap($container).parent();
// sanity check:
if($container[0] == $wrappingContainer[0]) {
alert('Same object?!?!'); // Should not happen
}
$label = $('<span class="duration-label">Hi there</span>');
$label.appendTo($wrappingContainer);
});
.target {
border: 1px solid black;
}
.container {
background: red;
padding: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class="target">
<span>This is some unimportant text</span>
</div>
<button type="button">Click me</button>
相关文章:
- 奇怪的Javascript结果
- Javascript(jQuery)给了我奇怪的结果
- JSONP请求返回结果,但也触发error_callback
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- Javascript,输出结果后页面不断刷新
- 这是使用html快照和谷歌获取的预期结果吗?SEO/SPA
- 将地理编码结果转换为php变量以发布到mysql数据库
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- JQuery:向多个匹配结果添加换行符的最简单方法
- 如何从ajax调用返回.wrap()元素
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- webpack代码拆分了handlerbs文件——结果是文件很大
- JavaScript循环无法正确计算/显示结果
- 相同的RegExp返回不同的结果-第一次是正确的结果,第二次是null
- Node.js使用Series函数(模式?)实现流控制时出现意外结果
- 试图将onChange函数作为道具传递给GrandChlidren,结果是TypeError:这是未定义的
- jQuery使用api获取typeform结果
- 根据条件检查数据库结果
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- jQuery的wrap和appendTo没有达到预期的结果