Jquery/Javascript创建元素
考虑以下DOM操作问题:我需要在单击某个链接后创建一个span标记。由于进程加快,我更喜欢使用Jquery/Javascript创建元素,javascript,jquery,html,dom,Javascript,Jquery,Html,Dom,考虑以下DOM操作问题:我需要在单击某个链接后创建一个span标记。由于进程加快,我更喜欢使用document.createElement()(纯Javascript)而不是创建HTML元素的Jquery方法。下面的代码编译正确,但不起作用(可能是因为Javascript和Jquery之间存在干扰)。任何帮助都将不胜感激 <body> <a href="#">Create thumbnails</a> <script ty
document.createElement()
(纯Javascript)而不是创建HTML元素的Jquery方法。下面的代码编译正确,但不起作用(可能是因为Javascript和Jquery之间存在干扰)。任何帮助都将不胜感激
<body>
<a href="#">Create thumbnails</a>
<script type="text/javascript">
$('a').click(function(e) {
var newSpan=null;
newSpan = document.createElement('span');
newSpan.setAttribute('class','themes');
$('.themes').html('themes');
$('.themes').appendTo('body');
return false;
});
</script>
</body>
$('a')。单击(函数(e){
var newSpan=null;
newSpan=document.createElement('span');
setAttribute('class','themes');
$('.themes').html('themes');
$(“.themes”).appendTo('body');
返回false;
});
在jQuery可以使用它之前,您需要将它插入文档中的某个位置。我认为这是因为jQuery“$”函数正在查找文档正文中已经包含类“主题”的任何内容。它找不到任何内容,因为您只是在之后尝试附加它。请尝试以下操作:
<body>
<a href="#">Create thumbnails</a>
<script type="text/javascript">
$('a').click(function(e) {
var newSpan=null;
newSpan = document.createElement('span');
newSpan.setAttribute('class','themes');
$(newSpan).html('themes');
$(newSpan).appendTo('body');
return false;
});
</script>
</body>
$('a')。单击(函数(e){
var newSpan=null;
newSpan=document.createElement('span');
setAttribute('class','themes');
$(newSpan.html('themes');
$(newSpan.appendTo('body');
返回false;
});
使用$(“.themes”)
作为选择器,将在文档中搜索类为“themes”的元素,而不是函数中的newSpan
元素。您必须使用newSpan
作为选择器,直到它附加到文档中
$('.themes').appendTo('body');
在这段代码中,您告诉jQuery找到类“themes”的所有元素并将它们附加到body中,但是为了找到它们,元素需要已经存在于DOM中,而事实似乎并非如此。在使用jQuery查找元素之前,应该创建元素并通过JavaScript将其附加到DOM中
$('a').click(function(e) {
var newSpan=null;
newSpan = document.createElement('span');
newSpan.setAttribute('class','themes');
$('body').append(newSpan);
$('.themes').html('themes');
e.preventDefault();
});
演示:dom中不存在新元素。
将其附加到文档中,然后查看是否有效。
+如果您正在使用jquery,为什么不一直使用它呢
$('a').click(function(e) {
$('span')
.attr('class','themes')
.html('themes');
.appendTo('body');
e.preventDefault();
});
$('a')。单击(函数(e){
var newSpan=null;
newSpan=document.createElement('span');
setAttribute('class','themes');
//无法操纵span.theme,因为span仍然不存在
//$('.themes').html('themes');
//$(“.themes”).appendTo('body');
//在主体上创建跨度,然后可以对其进行操纵
document.body.appendChild(newSpan);
$('.themes').html('themes');
返回false;
});
或:
$('a')。单击(函数(e){
$(this.after('thumb');
});
您的代码有几个问题:
- jQuery选择器找不到文档中不存在的元素
和getAttribute()
在旧版IE中被破坏。请改用setAttribute()
属性className
$('a').click(function(e) {
var newSpan = document.createElement('span');
newSpan.className = 'themes';
newSpan.innerHTML = 'themes';
document.body.appendChild(newSpan);
return false;
});
将刚刚创建的范围包装为jQuery对象,这样即使不将其附加到主体中,也可以对其执行jQuery操作
<body>
<a href="#">Create thumbnails</a>
<script type="text/javascript">
$('a').click(function(e) {
var newSpan=null;
newSpan = document.createElement('span');
newSpan.setAttribute('class','themes');
var jqNewSpan = $(newSpan);
jqNewSpan.html('themes');
jqNewSpan.appendTo('body');
return false;
});
</script>
</body>
$('a')。单击(函数(e){
var newSpan=null;
newSpan=document.createElement('span');
setAttribute('class','themes');
var jqNewSpan=$(newSpan);
jqNewSpan.html('themes');
jqNewSpan.appendTo('body');
返回false;
});
“但不起作用”不是对问题的良好描述。事实上发生了什么?什么不是?有错误吗?Javascript和HTML没有错误compiled@George:FYI.setAttribute('class','themes')
可能会在IE6
中给您带来麻烦。如果您支持的是IE6
,则可能需要使用.setAttribute('className','themes')代码>取而代之。我不会一直使用Jquery,因为我阅读了该文档。createElement(span)比$('span')快。好的,也可以用你的方式完成,但我不认为这是一个真正的问题。我认为jquery的速度要慢几毫秒,这并不能真正影响您。这就像您希望使用本机javascriptaddEventListener
而不是jquery的bind
(或者在您的例子中单击会更快一些),因为它有点快。@George,您是对的,但您是错的:<代码>$(“”)
比本机JS慢,但仍以每秒240000次以上的速度停止。代码的可维护性和可伸缩性比这种微不足道的性能调整要重要得多。为什么不只是用过程性的东西编写代码呢?它比OOP更快。这在旧版IE(兼容模式下为6、7、8)中不起作用,因为setAttribute()
在这些浏览器中被破坏。改为使用newSpan.className='themes'
。最有用的详细信息:“直到它附加到文档中”。非常感谢。
$('a').click(function(e) {
var newSpan = document.createElement('span');
newSpan.className = 'themes';
newSpan.innerHTML = 'themes';
document.body.appendChild(newSpan);
return false;
});
<body>
<a href="#">Create thumbnails</a>
<script type="text/javascript">
$('a').click(function(e) {
var newSpan=null;
newSpan = document.createElement('span');
newSpan.setAttribute('class','themes');
var jqNewSpan = $(newSpan);
jqNewSpan.html('themes');
jqNewSpan.appendTo('body');
return false;
});
</script>
</body>