【前端】三个bug

目录

一、Array对象的indexOf()

二、使用jquery,clone()下拉框问题

三、jquery获取获取html5的data-*属性

一、Array对象的indexOf()

1、indexOf()定义:

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

2、bug描述

var arr = ["1","2"];console.log(arr.indexOf(1)); // -1    为何是-1?

3、解释

indexOf()  会做强类型校验。

二、clone下拉框问题

1、clone()定义

clone() 方法生成被选元素的副本,包含子节点、文本和属性。

2、bug描述

如下图片:

先将select值选为2。点击clone后,新增的select选中项为1;

如何才能保证clone的select元素,选中的项也一样?

...
<div>
  <select>
    <option>1</option>
    <option>2</option>
  </select>
</div>
<br/><button>clone</button>

<script>
$(‘button‘).click(function(){
   var select1 = $(‘select‘).clone();
   $(‘div‘).append(select1);

});
</script>

3、解决方法:

 //对下拉框增加change事件。每次改变下拉框,手动增加selected属性;$(‘select‘).change(function(){    $(this).find(‘option[selected]‘).removeAttr(‘selected‘);    $(this).find(‘option:selected‘).attr(‘selected‘,‘selected‘);
});

三、jquery获取获取html5的data-*属性

1、html的data-*属性

定义和用法

data-* 属性用于存储页面或应用程序的私有自定义数据。

data-* 属性赋予我们在所有 HTML 元素上嵌入自定义 data 属性的能力。

存储的(自定义)数据能够被页面的 JavaScript 中利用,以创建更好的用户体验(不进行 Ajax 调用或服务器端数据库查询)。

data-* 属性包括两部分:

  • 属性名不应该包含任何大写字母,并且在前缀 "data-" 之后必须有至少一个字符
  • 属性值可以是任意字符串

注释:用户代理会完全忽略前缀为 "data-" 的自定义属性。            

2、jquery的data()方法

data() 方法向被选元素附加数据,或者从被选元素获取数据。

3、bug描述       

<select data-test="1">
   <option>1</option>
   <option>2</option>
</select>
<button>change</button>

<script>//点击button后,会对select的data-test属性赋值为2; 然后进行读取
$(‘button‘).click(function(){
  $(‘select‘).data(‘test‘,‘2‘);
  console.log($(‘select‘).data(‘test‘)); // 2
  console.log($(‘select‘).attr(‘data-test‘)); // 1     为何两个结果不一致呢?
});
</script>

4、解释

之前我一直理解的是: 如果一个元素的属性为data-test  ,那么$().data(‘test‘)  和 $().attr(‘data-test‘)是一个等价的存在。

         正确的解释如下:

data()的值进行修改并不会影响到DOM元素上的data-*属性的改变。

data()的本质其实是将一个 “cache” 附加到了对象上,并使用了一个特殊的属性名称。

参考链接:

js,jQuery获取html5的data-*属性

jQuery.data() 的实现方式

时间: 2024-08-29 14:19:34

【前端】三个bug的相关文章

前端(一)—— 前端三种语言、

前端三种语言.核心标签.常见标签.标签分类 一.前端 前端即网站前台部分,运在PC端,移动端等浏览器上展现给客户浏览的的网页.随着互联网技术的发展,HTML5,CSS3,前端框架的应用,跨平台响应式网页设计能够适应各种屏幕分辨率,完美的动效设计,给用户带来极高的用户体验.前端技术一般分为前端设计和前端开发,前端设计一般可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括基本的HTML和CSS以及JavaScript. 二.HTML.CSS.JavaScript 1.HTML (1)ht

前端开发避免bug注意事项

一.所有提交表单时避免重复提交 解决办法,1.在ajax请求前给提交按钮设置disabled:true,请求完毕之后,无论成功与否,设置disabled:false 2.设置ajax为同步请求,async:false 二.使用前端模板在html里的变量,都要在js里判断后台有没有返回对应字段,没有要设置默认值 三.注意pc端和移动端表单填写时字段是否一致,避免一端填好数据后在另一端显示会没有此字段而报错

android下前端开发诡异bug记录&amp;解决方法

1.border-radius有bug,围不住background 描述:设置了border-radius后,背景色依然会从圆角里冒出来 解决方法:在设置了border-radius的容器加上background-clip:padding-box;一定要把background样式提到background-clip样式前!!(被这个bug坑死了,花了大半天时间在近乎绝望的情况下找出了原因) 不断补充中…

前端三种对象解析

三种对象如下: 一.js对象:(对象只是带有属性和方法的特殊数据类型) 内建对象:如 String.Date.Array.Math 自定义对象: new Object(); 函数定义对象,如person,再new person(); 二.DOM对象 是我们用传统的方法(javascript)获得的对象 如:var domObj =document.getElementById("id"); 三.jquery对象 是我们用$()获得的对象 如:var $Obj =$("#id&

重修课程day48(前端三之css二)

一 伪类选择器 伪类选择器就是在查找的后面加上冒号和状态 hover:悬浮到上面就会变化一种状态 link:没有接触的状态 active:点击是触发的状态 visited:点击后的状态 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> a:link{

前端三系列

阅读目录 第一篇: HTML 第二篇: CSS 第三篇: JavaScript 第四篇: jQuery 第五篇: Bootstrap 持续更新中...

前端(三):JavaScript基础

JavaScript是一种属于网络的脚本语言,常用来为网页添加各式各样的动态功能,是一种动态类型.弱类型.基于原型的语言.它包括三个部分:ECMAScript.BOM和DOM.ECMAScript描述了该语言的语法和基本对象.BOM,浏览器对象模型,描述了与浏览器进行交互的方法和接口.DOM,文档对象模型,描述了处理网页内容的方法和接口.js的使用:js代码写在script标签中,其引入方式和css样式的style标签一致. 一.变量.数据类型与运算符 1.变量 声明变量: - 通过var关键字

利用前端三大件(html+css+js)开发一个简单的“todolist”项目

一.介绍 todolist,即待办事项.在windows android ios上参考微软家出的那个To-Do应用,大概就是那样的.我这个更简单,功能只有"待办" "已完成"两项,并且是在浏览器打开的. 二.界面和文件结构这些... 实际在浏览器中的网页如下: 在subline中的文件结构有index.html.index.css.index.js各一个,如下图: 三.程序 参考注释即可看懂. (1)index.html文件 1 <!DOCTYPE html&

前端三贱客 -- JavaScript中的DOM元素

文档对象模型(Document Object Model,DOM)是一种用于HTML编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.DOM相当于是一个模块,提供了关于HTML文档中对标签进行操作的功能,JavaScript结合DOM可以对HTML中的标签进行操作.可以把DOM看做是一张映射表,记录着一堆用代码操控document时的规章制度,直白点说,就是js操作html时的API. DOM选择器 DOM中提供了一系列的选择器用于在HTML文档中找到指定的相关标签对象