添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

先上出现的问题图(vue框架):

<div id="sortable">
    <li class='gray' v-for="(item,idx) in keywords_list" :id="item.kid">
        <span>{{idx + 1}}</span>
        <span>{{item.kid}}</span>
        data: {
            keywords_list: [
                {kid: 1},
                {kid: 2},
                {kid: 3},
                {kid: 4},
                {kid: 7},
                {kid: 8},

现在是我要将其进行排序,这里用到了一个JQuery的一个可拖动排序插件:https://jqueryui.com/sortable/

好,这是刚开始我写的js:

sort_keywords: function(){ var result = []; var single = {}; $("#sortable li").each(function(idx,ele){ single['kid'] = $(this).attr('id'); single['seq'] = idx; result.push(single); console.log(result);

在浏览器打印的是这样的:

打印出的值既然全部是一样的,很显然这是一个错误的写法。

后来经过多次分析,想了一个多小时(都怪自己基础知识不牢固,这时间花的不值啊)

刚开始,以为定义了一个空对象,每次遍历的时候把kid赋值给single对象里的属性名为kid的属性就好了,然后再把single这个对象一次一次Push进数组就可以实现了。

后来发现,只要懂for循环的同学不难看出,由于每次遍历的kid都不同,虽然第一次成功push进数组,但是在第二次遍历之后,$(this).attr('id')这个值发生了改变,且赋值给同一个对象的同一个属性!又由于对象的属性唯一性,后面的值将替换之前的值,所以,层层遍历之后,对象属性kid的值将是最后一个遍历出来的$(this).attr('id'),所以在最后数组中的元素全部是一样的。

改正之后的js:

            sort_keywords: function(){
                var result = [];
                $("#sortable li").each(function(idx,ele){
                    var single = {
                        kid: $(this).attr('id'),
                        seq: idx
                    result.push(single)            
                console.log(result)

打印出的结果:

如果我们在内部定义一个对象,属性都已设置好,我们只需要把值赋值给属性名即可,这种方法为啥可行?是因为每次遍历的时候,都会新声明一个对象,然后传值,再push进数组。虽然这个同名对象会被后一轮遍历所替换,但是没关系啊!因为你已经把想要的值已经push进数组了呀!

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------更新一下关于JQuery一些常用的方法

1.$(this).index()

index() 方法返回指定元素相对于其他指定元素的 index 位置,这些元素可通过 jQuery 选择器或 DOM 元素来指定。如果未找到元素则返回-1。

<script type="text/javascript" src="/jquery/jquery.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("li").click(function(){ console.log($(this).index()); </script> </head> <li>Coffee</li>//点击第一个则打印出1 <li>Milk</li>//点击第二个则打印出2 <li>Soda</li>//点击第三个则打印出3 </body> </html>

2.$(this).eq()

eq() 方法将匹配元素集缩减值指定 index 上的一个。其中eq()中的参数为整数,指示元素的位置(最小为 0)。如果是负数,则从集合中的最后一个元素往回计数。

<!DOCTYPE html>
  <style>
  div { width:60px; height:60px; margin:10px; float:left;
        border:2px solid blue; }
  .blue { background:blue; }
  </style>
  <script type="text/javascript" src="/jquery/jquery.js"></script>
</head>
  <li>list item 1</li>
  <li>list item 2</li>
  <li>list item 3</li>
  <li>list item 4</li>
  <li>list item 5</li>
<script>
    $('li').eq(2).css('background-color', 'red');//即选中li第三个元素进行颜色重绘
</script>
</body>
</html>
                    先上出现的问题图(vue框架):&amp;lt;div id=&quot;sortable&quot;&amp;gt;    &amp;lt;li class='gray' v-for=&quot;(item,idx) in keywords_list&quot; :id=&quot;item.kid&quot;&amp;gt;        &amp;lt;span&amp;gt;{{idx + 1}}&amp;lt;/span&amp;gt;        &amp;lt;span&amp;
push(item) 数组尾部插入一个元素,返回插入后数组的长度
unshift(item) 数组头部插入一个元素,返回插入后数组的长度
pop() 数组尾部删除一个元素,返回删除的数组元素
shift() 数组头部删除一个元素,返回删除的数组元素
				
jQuery在使用$或者jQuery这个关键字的方法时,会在其框架内部动态的创建一个构造函数,下面这个函数:....... jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context, rootjQuery ); ....... 然后控制台输jQuery对象
下面是两代码,each里面的函数是遍历所选择的元素集,对每个元素做你想要的处理。 一个代码是每一个元素的alt的设置成abc, 第二个代码是把取每个元素的alt的,加到数组里面,可以视为对其(所选择的元素集)的自定义处理。 1 <script type="text/javascript">2 ...
TensorFlow是一个开放源代码的软件库,用于行高性能数计算。通过其灵活的架构,它允许用户轻松地部署计算工作在各种平台(CPUs、GPUs、TPUs)上,无论是在桌面、服务器还是移动设备上。TensorFlow最初由Google Brain团队(属于Google的人工智能部门)开发,并在2015年被发布到Apache 2.0开源许可证下。 TensorFlow的主要特点包括它的高度灵活性、可扩展性和可移植性。它支持从小到大的各种计算,从手机应用到复杂的机器学习系统。TensorFlow提供了一个全面的、灵活的生态系统的库、工具和社区资源,使研究人员能够推动人工智能领域的最前沿,并使开发人员能够轻松构建和部署由机器学习驱动的应用。 TensorFlow的核心是使用数据流图来表示计算。在数据流图中,节点表示在数据上执行的操作,而图中的边表示在操作之间流动的数据。这种表示法允许TensorFlow有效地执行并行计算,并且可以在不同的硬件平台上高效运行。此外,TensorFlow支持自动微分,这对于实现复杂的机器学习算法(如深度学习网络)至关重要。