为了账号安全,请及时绑定邮箱和手机立即绑定
2.2 元素获取

2.2.1 获取单个元素与变量的引用一样,数组可以获取单个位置的元素,利用 ${ARG[num]}。例如:[root@master scripts]# echo ${ARG1[0]} //获取AEG1数组中第一个元素1[root@master scripts]# echo ${ARG1[3]} //获取AEG1数组中第四个元素hello Shell2.2.2 获取全部元素获取数组值获取数组全部元素使用 ${ARG[*]} 或 ${ARG[@]}。例如:[root@master scripts]# echo ${ARG1[@]}1 2 3 hello Shell[root@master scripts]# echo ${ARG1[*]}1 2 3 hello Shell获取数组下标获取数组全部下标使用 ${!ARG[*]} 或 ${!ARG[@]}。例如:[root@master ~]# echo ${!ARG1[@]}0 1 2 3[root@master ~]# echo ${!ARG1[*]}0 1 2 32.2.3 获取数组长度获取整个数组长度数组长度及数组中元素的个数,可以利用 ${#ARG[*]} 或 ${#ARG[@]},我们发现其实就是在获取数组全部元素前添加#来获取数组个数。例如:[root@master scripts]# echo ${#ARG1[*]}4[root@master scripts]# echo ${#ARG1[@]}4获取单个元素的长度对于数组中的某个元我们也可以进行长度的获取,可以利用 ${#ARG1[num]}。例如:[root@master scripts]# echo ${ARG1[@]} 100 2 3 hello Shell 10[root@master scripts]# echo ${ARG1[3]} //获取第四个元素内容为:hello Shellhello Shell[root@master scripts]# echo ${#ARG1[3]} //获取四个元素长度为11112.2.4 数组元素的修改数组可以进行一些列对其元素的操作。修改对数组元素的修改,直接对单个元素修改即可,例如:[root@master scripts]# AEG1[0]=100[root@master scripts]# echo ${ARG1[@]}100 2 3 hello Shell增加对数组元素的增加,和修改一致,直接对单个位置元素增加即可,例如:[root@master scripts]# ARG1[10]=10[root@master scripts]# echo ${ARG1[@]}100 2 3 hello Shell 10[root@master scripts]# echo ${#ARG1[@]}5Tips:在此我们发现元素之前有 4 个元素,我们将下标 10 的元素赋值为 10,数组是按照从前往后顺序赋值的。删除删除数组可以使用 unset,unset ARG1[num] 可以删除对应下标的数组元素,如果不带下标则删除数组的全部元素,例如:[root@master scripts]# echo ${ARG1[@]} 100 3 hello Shell 10[root@master scripts]# unset ARG1[0] //删除下标为0的元素[root@master scripts]# echo ${ARG1[@]}3 hello Shell 10[root@master scripts]# unset ARG1 //删除整个数组元素[root@master scripts]# echo ${ARG1[@]}2.2.5 数组的切片和其他语言一样,可以对数组进行切片也称截取操作。可以通过 ${AEG1[@或*]:起始位置:长度} 对原数组进行切片,返回的为字符串,例如:[root@master scripts]# echo ${ARG1[@]}1 2 3 hello Shell[root@master scripts]# echo ${ARG1[@]:0:2} //从第1个元素往后2个元素进行切片1 22.2.6 数组的替换可以替换数组中的某一个元素,例如我们将 ARG1 数组中的第 1 个元素替换为 110。[root@master scripts]# echo ${ARG1[@]}1 2 3 hello Shell[root@master scripts]# echo ${ARG1[@]/1/110}110 2 3 hello Shell

6.3 获取指定范围的元素

>>> db.lrange('url', 0, 1)['www', 'imooc']>>> db.lrange('url', 0, 2)['www', 'imooc', 'com']lrange(start, stop) 返回列表中指定区间 [start, stop] 内的元素在第 1 行,获取列表 url 中范围 [0, 1] 内的 2 项元素在第 3 行,获取列表 url 中范围 [0, 2] 内的 3 项元素

3.4 提取数组元素的子集

可以通过指定起点和要提取的元素数来提取数组元素的子集。例如,从元素1开始并读取3个元素:实例:# 定义一个数组> days_of_week = [ "Mon", "Tues", "Wed", "Thu", "Fri", "Sat", "Sun" ]=> [ "Mon", "Tues", "Wed", "Thu", "Fri", "Sat", "Sun" ]> days_of_week[1, 3]=> ["Tues", "Wed", "Thu"]同样,我们可以指定一个范围(请参考 Ruby的范围章节)。实例:> days_of_week[1..3]=> ["Tues", "Wed", "Thu"]或者,可以使用 Array 类的slice方法。实例:> days_of_week.slice(1..3)=> ["Tues", "Wed", "Thu"]

2. 通过反射获取值

其中 reflect.ValueOf() 函数可以获取一个变量的值。代码示例:package mainimport ( "fmt" "reflect")func main() { test := 10 ValueOfTest := reflect.ValueOf(test) fmt.Println("变量test的值:", ValueOfTest)}第 9 行:定义一个值为 10 的变量;第 10 行:通过反射获取变量的值。执行结果:

1. 通过反射获取类型

在 Go 语言中提供反射的包为 reflect 包,其中reflect.Type()函数可以获取一个变量的类型。代码示例:package mainimport ( "fmt" "reflect")func main() { test := 10 typeOfTest := reflect.TypeOf(test) fmt.Println("变量test的类型:", typeOfTest)}第 9 行:定义一个值为10的变量;第 10 行:通过反射获取变量的类型。执行结果:

HTML 结构化元素标签

网页是由一个一个的区域组成,就像房子中的房间一样,每个区域内可以放置 HTML 元素,然后可以对区域设置样式从而将其与别的区域区分开来。这个区域在 HTML 中由结构元素实现,又可以将其称之为容器元素。通过搭配 ID 属性使用,结构元素将会帮助我们构建结构化条理分明的网站逻辑。本章我们介绍一下 结构元素的使用方式和场景。

3. Znode 的元素组成

我们先来了解 Znode 节点中由哪些元素组成,请看下图:我们可以看到,Znode 节点中由 4 种元素组成,接下来我们来分别介绍一下每个元素具体是什么。Znode 节点元素介绍:data : Znode 存储的数据信息,这里的数据指用户保存的数据;ACL : 对节点进行权限控制,记录了哪些用户或者哪些 IP 地址可以访问本节点;child : 当前节点的子节点引用,通过这个节点来找到它的子节点;stat : 包含 Znode 的各种元数据,比如事务 ID、版本号、时间戳、大小等 Znode 本身的数据。Tips: Znode 的 data 元素存储的信息最大不能超过 1MB 。太大的数据会影响 Zookeeper 的同步性能。在了解了 Znode 的元素组成,每个元素的具体作用之后,我们接下来学习 Znode 节点有哪些类型,以及他们的特点。

4.1 通过集合创建 Stream

Java 8 的java.util.Collection 接口被扩展,提供了两个获取流的默认方法:default Stream<E> stream():返回一个串行流(顺序流);default Stream<E> parallelStream():返回一个并行流。实例如下:// 创建一个集合,并添加几个元素 List<String> stringList = new ArrayList<>(); stringList.add("hello"); stringList.add("world"); stringList.add("java"); ​ // 通过集合获取串行 stream 对象 Stream<String> stream = stringList.stream(); // 通过集合获取并行 stream 对象 Stream<String> personStream = stringList.parallelStream();串行流并行流的区别是:串行流从集合中取数据是按照集合的顺序的;而并行流是并行操作的,获取到的数据是无序的。

1. 获取 DOM 节点

获取 DOM 节点的方式有很多,这里例举几个常用的,所有的 DOM 元素都具有以下方法:element.getElementByIdelement.getElementByNameelement.getElementsByTagNameelement.getElementsByClassNameelement.querySelectorelement.querySelectorAll

7.2 获取集合的成员

>>> db.scard('set')3>>> db.smembers('set'){'b', 'c', 'a'}在第 1 行,使用方法 scard(‘set’) 获取集合的元素的数量在第 3 行,使用方法 smembers(‘set’) 获取集合的所有元素>>> db.sismember('set', 'b')True>>> db.sismember('set', 'd')False在第 1 行,使用方法 sismember(‘set’, ‘b’) 检查集合 ‘set’ 是否包含 ‘b’在第 3 行,使用方法 sismember(‘set’, ‘d’) 检查集合 ‘set’ 是否包含 ‘d’

获取和操作 DOM 节点

DOM 节点也会被称为 DOM 元素。想要操作 DOM 节点,就必须先获取到 DOM 节点。

5.3 获取数组长度

我们可以使用数组的内置属性length来获取数组的长度,使用点操作符调用其内置属性:arrayName.length。实例如下:504数组arr的长度为:3有时我们想引用数组中最后一个元素,由于数组下标从0开始,所以最后一个元素的下标为数组的长度减去1,这时可以结合length属性来进行引用。实例如下:505charArr数组的最后一个元素为:c

3. 容器中获取对象的过程

还是先看下我们获取容器对象的代码:public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml"); UserService service = (UserService) context.getBean("userService"); service.saveUser();}代码分析:context.getBean 的方法是通过 bean 标签里的 id 来从容器中获取,那么我们看下源码 :在父类 AbstractApplicationContext 中有对 getBean 方法的实现。 @Override public Object getBean(String name) throws BeansException { assertBeanFactoryActive(); return getBeanFactory().getBean(name); }追踪父类方法最终通过我们层层追踪,我们在 AbstractAutowireCapableBeanFactory 中发现这样的一段代码:protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Object[] args) throws BeanCreationException { //... //省略大量方法内部代码 //... // Initialize the bean instance. Object exposedObject = bean; try { //给实例中的属性赋值 populateBean(beanName, mbd, instanceWrapper); //真实实例化对象 exposedObject = initializeBean(beanName, exposedObject, mbd); } //... //继续省略大量方法 //... // Register bean as disposable. try { //将实例化后的对象放入容器中 registerDisposableBeanIfNecessary(beanName, bean, mbd); } catch (BeanDefinitionValidationException ex) { throw new BeanCreationException( mbd.getResourceDescription(), beanName, "Invalid destruction signature", ex); } //返回实例化后的对象实例 return exposedObject; }上面源码中我们可以看到: 对象实例的获取好像是在获取的时候执行的 doCreateBean,那么之前记载的 xml 文件不是实例过了吗?稍微解释下:加载文件时候的实例化操作,其实是实例化了一个 Spring 框架提供的对象,作用是对于我们 bean 对象做描述,这里才是真实的实例化动作。我们再看看 registerDisposableBeanIfNecessary 这个方法做的是什么。public void registerDisposableBean(String beanName, DisposableBean bean) { synchronized (this.disposableBeans) { this.disposableBeans.put(beanName, bean); } }结论一切真相大白。它其实就是一个 map 集合 ,这个 map 集合的 key 就是我们定义的 bean 的 id 或者 bean 的 name ,那么值就是对象的实例。

3.2 访问数组元素

数组的元素可以通过结合[]方法引用相关元素的索引来访问。例如,要访问数组的第一个和第二个元素。实例:# 定义一个数组> days_of_week = [ "Mon", "Tues", "Wed", "Thu", "Fri", "Sat", "Sun" ]=> [ "Mon", "Tues", "Wed", "Thu", "Fri", "Sat", "Sun" ]> days_of_week[0]=> "Mon"> days_of_week[1]=> "Tues"或者使用at方法:实例:> days_of_week.at(0)=> "Mon"可以使用 Array 类的first和last方法访问首个和末尾元素。实例:> days_of_week.first=> "Mon"> days_of_week.last=> "Sun"

3. 获取 Bitamp 实例

Android 提供了多种方法获取 Bitamp 实例,我们可以直接从 ImageView 上拿到当前设置的图片的 Bitamp 对象:private Bitmap bmp;private ImageView img;img = (ImageView)findViewById(R.id.imageView);BitmapDrawable drawable = (BitmapDrawable)img.getDrawable();bmp = drawable.getBitmap();从上面的代码中也可以看到我们可以通过 Drawable 的getBitmap()方法从 Drawable 对象中提取出 Bitamp。Android 还提供了一个 BitampFractory 工厂对象,专门让我们去获取 Bitmap 实例,主要有以下几种常用方法:// 从资源文件中解码出 Bitmapprivate Bitmap getBitmapFromResource(Resources res, int resId) { return BitmapFactory.decodeResource(res, resId);}// 从图片文件中获取private Bitmap getBitmapFromFile(String pathName) { return BitmapFactory.decodeFile(pathName);}// 从像素数组中获取public Bitmap Bytes2Bimap(byte[] b) { if (b.length != 0) { return BitmapFactory.decodeByteArray(b, 0, b.length); } else { return null; }}// 读取输入流private Bitmap getBitmapFromStream(InputStream inputStream) { return BitmapFactory.decodeStream(inputStream);}

5.1 获取字段

Field 类代表某个类中的一个成员变量,并提供动态的访问权限。Class 提供了以下几个方法来获取字段:Field getField(name):根据属性名获取某个 public 的字段(包含父类继承);Field getDeclaredField(name):根据属性名获取当前类的某个字段(不包含父类继承);Field[] getFields():获得所有的 public 字段(包含父类继承);Field[] getDeclaredFields():获取当前类的所有字段(不包含父类继承)。获取字段的实例如下:package com.imooc.reflect;import java.lang.reflect.Field;public class ImoocStudent1 { // 昵称 私有字段 private String nickname; // 余额 私有字段 private float balance; // 职位 公有字段 public String position; public static void main(String[] args) throws NoSuchFieldException { // 类名.class 方式获取 Class 实例 Class cls1 = ImoocStudent1.class; // 获取 public 的字段 position Field position = cls1.getField("position"); System.out.println(position); // 获取字段 balance Field balance = cls1.getDeclaredField("balance"); System.out.println(balance); // 获取所有字段 Field[] declaredFields = cls1.getDeclaredFields(); for (Field field: declaredFields) { System.out.print("name=" + field.getName()); System.out.println("\ttype=" + field.getType()); } }}运行结果:public java.lang.String com.imooc.reflect.ImoocStudent1.positionprivate float com.imooc.reflect.ImoocStudent1.balancename=nickname type=class java.lang.Stringname=balance type=floatname=position type=class java.lang.StringImoocStudent1 类中含有 3 个属性,其中 position 为公有属性,nickname 和 balance 为私有属性。我们通过类名.class 的方式获取了 Class 实例,通过调用其实例方法并打印其返回结果,验证了获取字段,获取单个字段方法,在没有找到该指定字段的情况下,会抛出一个 NoSuchFieldException。调用获取所有字段方法,返回的是一个 Field 类型的数组。可以调用 Field 类下的 getName() 方法来获取字段名称,getType() 方法来获取字段类型。

2. 操作 DOM

通常前端开发者指的操作 DOM ,就是操作 DOM 节点。如有以下结构的 HTML:<div> <p>我是一段文本</p> <a id="link" href="//imooc.com">我是一个超链接</a><div>经过浏览器后,上面三个元素就都是 DOM 节点了。这时候想修改 a 标签里的文案,就需要操作 DOM 节点来修改。通过 getElementById 方法就可以根据 id 获取到一个 DOM 节点,所有 DOM 节点都具有这个方法。在不知道某个元素的父级对象的时候,就可以使用 document.getElementById 来获取,意思是在 document 下根据 id 查找一个 DOM 节点。305通过修改dom节点的innerText属性就可以改掉文案。实际上这一段文案,就是一个文本节点。其实具有id属性的dom节点不需要获取,也可以直接通过JavaScript访问,如id为container的元素,就可以直接在JavaScript中使用container访问。因为具有id的节点会以id为属性名,作为window的属性存在,值就是这个DOM节点。但通常不建议这么做,因为他人阅读代码的时候可能会找不到声明的地方,二是名字被固定了。

4.2 通过反射读取注解

我们先来学习一下通过反射读取注解内容相关的 API。通过反射,判断某个注解是否存在于Class、Field、Method或Constructor:Class.isAnnotationPresent(Class)Field.isAnnotationPresent(Class)Method.isAnnotationPresent(Class)Constructor.isAnnotationPresent(Class)isAnnotationPresent()方法的返回值是布尔类型,例如,判断Student类中的nickname字段上,是否存在@Length注解:boolean isLengthPresent = Student.class.getDeclaredField("nickname").isAnnotationPresent(Length.class);通过反射,获取 Annotation 对象:使用反射 API 读取Annotation:Class.getAnnotation(Class)Field.getAnnotation(Class)Method.getAnnotation(Class)Constructor.getAnnotation(Class)例如,获取nickname字段标注的@Length注解:Length annotation = Student.class.getDeclaredField("nickname").getAnnotation(Length.class);通过反射读取注解的完整实例如下:public class Student { // 标注注解 @Length(min = 2, max = 5, message = "昵称的长度必须在2~6之间") private String nickname; public Student(String nickname) { this.setNickname(nickname); } public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public static void main(String[] args) throws NoSuchFieldException { boolean isLengthPresent = Student.class.getDeclaredField("nickname").isAnnotationPresent(Length.class); if (isLengthPresent) { Length annotation = Student.class.getDeclaredField("nickname").getAnnotation(Length.class); // 获取注解的参数值 int min = annotation.min(); int max = annotation.max(); String message = annotation.message(); // 打印参数值 System.out.println("min=" + min); System.out.println("max=" + max); System.out.println("message=" + message); } else { System.out.println("没有在nickname字段上找到@Length注解"); } }}运行结果:min=2 max=5 message=昵称的长度必须在2~6之间运行过程如下:

3. 模板文件 js_cookie.html

Cookie 保存在客户端,在客户端可以使用 Javascript 读取 Cookie 的值,代码如下:<html><meta charset='UTF-8'><title>在服务端设置 cookie</title><body><h2>在服务端设置 cookie</h2><h2>在客户端通过 Javascript 读取 cookie: <b id='cookie'><b/></h2></body><script> cookie = document.getElementById('cookie'); cookie.innerHTML = document.cookie;</script> </html>在第 7 行,定义了一个 id 为 ‘cookie’ 的 HTML 元素;在第 11 行,获取 id 为 ‘cookie’ 的 HTML 元素;在第 12 行,document.cookie 是浏览器端保存的 cookie 值,在 id 为 ‘cookie’ 的 HTML 元素中显示 cookie 的值。

4. 获取用户的输入信息

TextView 的功能只是作为信息输出展示给用户,而 EditText 除了可以展示信息之外,还需要从用户那里得到输入的内容,我们可以通过getText().toString()获取到 EditText 的输入信息。修改一下布局文件,添加一个 button 来触发获取的时机:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="20dp"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:text="确定" /> <EditText android:id="@+id/input_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginRight="10dp" android:layout_toLeftOf="@id/button" android:hint="请输入密码" android:imeOptions="actionDone" android:inputType="textPassword" android:maxLines="5" android:textSize="20sp" /></RelativeLayout>我们在第一个示例代码基础之上,加了一个 Button,并放在了一个 RelativeLayout 中(大家可以思考一下这里为什么要用 RelativeLayout,如果用 LinearLayout 能实现吗?),我们希望用 Button 作为获取 EditText 内容的触发事件,当点击 Button 的时候,我们获取用户在 EditText 中输入的内容,并打印到屏幕上验证结果。相关 Java 代码如下:final EditText editText = findViewById(R.id.input_password); Button button = findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, editText.getText(), Toast.LENGTH_SHORT).show(); } });首先我们根据 ID 拿到 EditText 和 Button 的实例,接着对 Button 设置一个监听器(关于 Button 监听器的使用,如果不清楚可以参考后续 Button 章节,不是本节重点),在监听器中我们获取 EditText 的内容,并通过 Toast 打印到屏幕,效果如下:扩展:其实getText()不是 EditText 特有的,TextView 也可以通过getText()拿到显示的内容,只不过 TextView 的内容是由我们设置上去的,所以需要去获取的场景比较少,用的也相对少。

2.1 id 属性

id 属性是 html 的通用属性,主要是用于给元素设置事件或者设置样式时用到,以下代码实现点击链接跳转之前弹框提示:952

1.5 element.querySelector

文档对象模型 Document 引用的 querySelector () 方法返回文档中与指定选择器或选择器组匹配的第一个 html 元素 Element 。 如果找不到匹配项,则返回 null 。element.querySelector 是获取 DOM 节点最常用的方法之一,可以传入 CSS 选择器来匹配获取 DOM 节点。如使用 CSS 在给 id 为 tip 的元素设置红色字体样式的时候,选择器使用的是 #tip。#tip { color: red;}使用 element.querySelector 获取 id 为 tip 的元素,传入的参数也是 #tip,与 CSS 选择器一致。311通过设置 style 下的 color 属性,可以更改字体颜色。通过 style 设置的样式都是内联样式。即便传入的选择器能匹配到多个 DOM 对象,此方法也只会返回一个 DOM 对象。

2.绑定元素的 Class

我们可以通过数组和对象的两种形式绑定元素的 Class。

5. Unsafe 操作数组元素

Unsafe 操作数组元素主要有如下两个方法:public native int arrayBaseOffset(Class arrayClass):返回数组类型的第一个元素的偏移地址 (基础偏移地址);public native int arrayIndexScale(Class arrayClass):返回数组中元素与元素之间的偏移地址的增量,配合 arrayBaseOffset () 使用就可以定位到任何一个元素的地址。实例:import sun.misc.Unsafe;import java.lang.reflect.Field;public class DemoTest { private static String[] names = {"多线程", "Java", "并发编程"}; public static void main(String[] args) { Unsafe unsafe = getUnsafe(); try { Class<?> a = String[].class; int base = unsafe.arrayBaseOffset(a); int scale = unsafe.arrayIndexScale(a); // base + i * scale 即为字符串数组下标 i 在对象的内存中的偏移地址 System.out.println(unsafe.getObject(names, (long) base + 2 * scale)); } catch (Exception e) { e.printStackTrace(); } } public static Unsafe getUnsafe() { Unsafe unsafe = null; try { Field field = Unsafe.class.getDeclaredField("theUnsafe"); field.setAccessible(true); unsafe = (Unsafe) field.get(null); } catch (Exception e) { e.printStackTrace(); } return unsafe; }}结果验证:并发编程通过对数组的元素的地址进行内存偏移,最后得到的结果为最后一个元素,并发编程。base + 2 * scale 表示字符串数组下标 i 在对象的内存中的偏移地址,偏移两个元素,得到最后一个元素。

2.4 xlrd 操作 Excel 单元格

单元格即表格中行与列的交叉部分,具体的内容也是写在单元格中,在获取单元格内容时需要通过行和列进行定位。常用操作单元格方法,见下表。方法描述 cell(rowx,colx)返回指定行和列中单元格对象 cell_value(rowx,colx)返回指定行和列中单元格的值 cell_type(rowx,colx)返回指定行和列中单元格的类型下面来具体看下每个方法的使用:cell () 方法import xlrddata = xlrd.open_workbook("data.xlsx")sheet=data.sheet_by_index(0)print(sheet.cell(1,2))#输出:text:'颜色'代码解释:cell () 方法根据指定的行索引和列索引,返回指定单元格对象。代码中传递 1,2,表示获取行所以为 1,列索引为 2 的单元格对象,即第 2 行第 3 列的单元格对象。cell_value () 方法import xlrddata = xlrd.open_workbook("data.xlsx")sheet=data.sheet_by_index(1)print(sheet.cell_value(1,2))#输出:颜色代码解释:cell_value () 方法返回指定行索引和列索引符合条件的单元格的值。代码中传递 1,2,即第 2 行第 3 列的单元格的值。cell_type () 方法import xlrddata = xlrd.open_workbook("data.xlsx")sheet=data.sheet_by_index(0)print(sheet.cell_type(1,2))#输出:1代码解释:cell_type () 方法返回指定行索引和列索引符合条件的单元格类型。代码中传递 1,2,即第 2 行第 3 列的单元格类型,输出结果 1 表示为字符串类型。除了上述方法可以获取到单元格中内容之外,也可以在获取到单元格对象后,通过单元格对象属性对单元格的值、类型进行获取,见下表。属性描述 ctype 获取单元格数据类型 value 获取单元格中的值下面来具体看下每个属性的使用:ctype 方法import xlrddata = xlrd.open_workbook("data.xlsx")sheet=data.sheet_by_index(0)print(sheet.cell(1,2).ctype)#输出:1代码解释:获取到单元格对象后,通过 ctype 属性来获取单元格数据类型。代码中通过 cell (1,2) 表示获取到了行索引为 1,列索引为 2 的单元格对象,通过 ctype 属性获取单元格类型,输出 1 表示为字符串类型。value 方法import xlrddata = xlrd.open_workbook("data.xlsx")sheet=data.sheet_by_index(0)print(sheet.cell(1,2).value)#输出:颜色代码解释:获取到单元格对象后,通过 value 属性来获取单元格的值。代码中通过 cell (1,2) 表示获取到了行索引为 1,列索引为 2 的单元格对象,通过 value 属性获取单元格的值。

2. 获取 cookie

document.cookie;通过 document.cookie 获取到的 cookie 由 cookie 的名称和值组成,由等号=分隔,并且可以有多条,每条 cookie 之间用分号 ‘;’ 分隔。

nth 元素选择

当我们要一组 class 同名,或者连续的一组元素的其中一个,或者某种规律的元素添加单独样式的时候,不妨看看这类的元素选择器。

3. 可选元素类型

元组类型允许在元素类型后缀一个 ? 来说明元素是可选的:const list: [number, string?, boolean?]list = [10, 'Sherlock', true]list = [10, 'Sherlock']list = [10]代码解释: 可选元素必须在必选元素的后面,也就是如果一个元素后缀了 ?号,其后的所有元素都要后缀 ?号。

2. 获取表单内容

获取表单内容,实际上就是取到表单项对应的 DOM 节点的值。获取 DOM 节点的方式非常多,前面的章节也有介绍。<style> h3 {margin-top: 0;color: #4caf50;} .login {width: 300px;padding: 32px;box-shadow: 2px 2px 10px rgba(0, 0, 0, .1);position: fixed;top: 40%;left: 50%;transform: translate(-50%, -50%);} .form-item {display: flex;margin-bottom: 16px;border-bottom: 1px solid #ccc;} .form-item .title {width: 70px;color: #666;font-size: 14px;} .form-item .content {flex: 1;} .form-item .content input {width: 100%;border: 0 none;padding: 2px 8px;outline: none;font-size: 16px;} .login-btn {width: 100%;border: 0 none;background-color: #4caf50;color: white;margin-top: 16px;outline: none;height: 32px;} .login-btn:active {background-color: #2da050;}</style><form name="login-form" class="login"> <h3>登入</h3> <label class="form-item"> <div class="title">用户名</div> <div class="content"> <input id="account" class="account" name="account" type="text"> </div> </label> <label class="form-item"> <div class="title">密码</div> <div class="content"> <input name="pwd" type="password"> </div> </label> <div> <button class="login-btn" type="submit">登入</button> </div></form><script> var account1 = document.getElementById('account'); var account2 = document.getElementsByName('account'); var account3 = document.getElementsByClassName('account'); alert(account1 === account2[0]); alert(account1 === account3[0]); var account4 = document.forms['login-form']['account']; alert(account1 === account4); console.log(document.forms['login-form'].elements);</script>前三种获取节点的方式读者都已经熟悉了。account4 的获取方式稍微有点不一样,document.forms 是文档内的表单集合,其可以通过表单的 id 和 form 的属性,取到具体的某个表单。取到表单后,还可以直接使用表单项的 name 属性取到对应的表单项,使用 elements 可以取到这个表单下的所有表单项。

2.4 索引 []

通过索引 [] 获取列表中指定位置的元素,示例如下:>>> x = ['www', 'imooc', 'com']>>> x[0]'www'>>> x[1]'imooc'>>> x[2]'com'在第 2 行,获取列表 x 的第 0 个元素 ‘www’在第 4 行,获取列表 x 的第 1 个元素 ‘imooc’在第 6 行,获取列表 x 的第 2 个元素 ‘com’Tips:列表的索引也可以从最后一位开始,例如:x[-1] 获取的是列表的最后一个元素。

首页上一页1234567下一页尾页
直播
查看课程详情
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号