Jquery警报不显示预期的代码

标签 jquery html

我不知道我的 jQuery 代码有什么问题。对我的代码中发生的情况进行更好的解释将会有很大帮助。

当调用追加时,它显示了我期望看到的元素,但在我的警报中我只能看到 1 个单词“第一个”。

HTML

<div id="myDiv">

</div>
<input type="button" id="btn" value="append"/>

JavaScript

$('#btn').click(function() {
    var myElement = '<span id="spn1">first </span><span id="spn2">second </span><span id="spn3">third </span><span id="spn4">fourth </span>';

    var $val = $(myElement).not('#spn2');

    $('#myDiv').append($val);
    alert($val.html());

});

或者jsfiddle:http://jsfiddle.net/MCvLQ/

最佳答案

好吧,让我逐行向您解释一下。 首先,

var $val = $(myElement).not('#spn2') 

这表示您正在选择 myElement 上的所有元素,不包括 id 为 spn2 的元素。

$val now is equivalent to
--------------------------
<span id="spn1">first </span>
<span id="spn3">third </span>
<span id="spn4">fourth </span>

正如您所注意到的,上面的元素中,id 为“spn2”的元素不再存在。基本上 .not() 选择器被定义为从匹配元素集中删除元素。

然后是这个语句

$('#myDiv').append();

将 $val 的所有元素添加到 myDiv 的末尾部分。

我在 myDiv 中添加了一个预定义元素,因此您会注意到所有元素都添加在 div 的最后部分。 我还创建了一个按钮供您查看 .append() 的相反内容,即 .prepend()。这还将在 myDiv 内现有元素的顶部添加元素。

在此处查看我修改后的代码以查看差异 http://jsfiddle.net/MCvLQ/1/

最后

alert($val.html());

.html() 定义为,获取匹配元素集中第一个元素的 HTML 内容。 引用这里 http://api.jquery.com/html/

注意 $val 的最新值,因为您可以看到第一个元素是“first”,这解释了为什么您的警报仅显示单词“first”。 .html() 方法使用浏览器的innerHTML 属性。


其他信息:

除了.not()选择器之外,您还可以使用:not()选择器。引用这里http://api.jquery.com/not-selector/

对于速度问题,此测试http://jsperf.com/jquery-css3-not-vs-not:not() 在除 IE8 之外的大多数浏览器上都比 .not() 好得多。

但是,这仍然取决于你。哪个对您来说更具可读性。 Codewise .not() 乍一看代码更容易阅读。

关于Jquery警报不显示预期的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5906537/

相关文章:

javascript - $(window).height 不断增长

jquery - 使用 jquery 从 <span> 获取复选框值

javascript - jQuery 选择器排除事件中的其他元素

javascript - 在 Html 中调用 JavaScript 函数

jquery - “拉伸(stretch)”一个 div 到浏览器的边缘

javascript - 如何在文本框中允许 Å ä Ö 和 å ä ö?

javascript - 为每行中的每个 td 添加唯一的类 jquery/coffeescript

javascript - 带有背景png的输入按钮

html - Bootstrap 下拉切换不适用于包装在对象标签中的 svg

css - 当我向嵌套 DIV 添加边距时,它会导致父 DIV 接收边距,除非我为父 DIV 提供边框。为什么?