LeeywBlog

我的学习笔记


  • Home

  • Archives

HTML-DOM

Posted on 2019-05-06

认识DOM

DOM 基础

When a web page is loaded, the browser creates a Document Object Model of the page.The HTML DOM model is constructed as a tree of Objects:
译: 当加载一个网页的时,浏览器会创建一个由文档、对象、模式组成的页面,这个HTML DOM 构造了一个对象树

What You Will Learn?
Change to HTML elements and Style(CSS) and lesten to DOM event and add or delete HTML element
DOM is a W3C standard,that is define for accessing documents

What is the HTML DOM?
The HTML DOM is a standard object model and programming interface for HTML . it define:
HTML element as Object
all properties in HTML element
thet events for all HTML element
the methods to access all HTML element

HTML DOM 的方法

HTML DOM 方法是一个可以执行的动作(在HTML element中)
HTML DOM 属性是一个value(在HTML element中) 所以可以设置或者改变它

about DOM Programming Interface .
HTML DOM 用Javascript或者其他的编程语言进行访问
在DOM中,所有的html元素都是Object
编程接口是每个对象的属性和methods
property是一个value你可以get or set 这个value
method 是一个动词,你可以对HTMl元素进行添加和删除
例子:
<!DOCTYPE html>


My First Page

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = "Hello World!";
</script>

</body>
</html>
<!DOCTYPE html>
<html>
<body>

<h2>My First Page</h2>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = "Hello World!";
</script>

</body>
</html>

在上面例子中,getElementById 是一个方法,但是在HTML中,它是一个属性

The getElementById Method 是最常见的访问HTMl中页面元素的方式。
上面的例子中getElementById 方法使用 id=”demo”寻找到元素

innerHTML属性是最简单获取元素中内容的方法
innerHTML property 可以很有效的获取或者改变页面元素内容

innerHTML可以改变任何HTML element的内容,包括 和

The HTML DOM Document

HTML DOM Document Object 是你Web page中所有其他对象的所有者(爸爸)

About HTML DOM Document

  1. document Object 就是你的web page
  2. 如果你想访问你web page的任何元素,你都是从document Object开始的
    3.下面的一些例子将会告诉你操作和访问HTML的办法

寻找 HTML Elements ?

Method
document.getElementById(id) //通过元素id寻找元素

document.getElementsByTagName(name)//通过标签名字寻找元素s

document.getElementsByClassName(name)//通过class的名字寻找元素s

改变页面元素?

Property

element.innerHTML =  new html content //更改元素内容

element.attribute = new value//更改元素属性值    

element.style.property = new style //更改元素的style(CSS)

Method
element.setAttribute(attribute, value)//改变元素的属性值

添加和删除元素?

Method    
document.createElement(element)//创建一个HTML元素

document.removeChild(element)//移除一个HTML元素儿子

document.appendChild(element)//添加一个元素儿子

document.replaceChild(new, old)//替换一个元素儿子

document.write(text)//Write into the HTML output stream

添加一个事件处理函数?

Method 
document.getElementById(id).onclick = function(){code} //添加一个事件处理程序,code中为onclick 事件

Finding HTML 对象 ?
第一版的HTML DOM 只定义了11个HTML 对象,对象集合和性质。这是在HTML5中仍然有效的,后来有了第三版的HTML DOM 添加了很多的对象,集合以及性质
a9cfd0a63e16b169ff2f19d00d005c88.png

JavaScript HTML DOM 元素

这将教你如何查找访问到一个page中的element

查找HTML 页面元素
通常你会想使用JavaScript操作HTML的元素
To do so, 你首先得找到element,有几种办法可以实现:

寻找页面元素 By (Id ,Tag name, Class name, Css selectors , HTML Object Collections) 

通过Id 寻找页面元素

这是寻找页面元素最简单的办法。例如:

var myElement = document.getElementById("intro");

如果寻找到了元素,则会返回一个元素作为对象,如果没有找到,则会返回null

通过标签名字找元素

var x = document.getElementsByTagName("p");

通过类名找元素

var x = document.getElementsByClassName("intro");

通过Css选择器找元素

如果你想找到所有指定的HTML元素的CSS选择器(id,class names, types, attributes, value of attributes, etc ),则可以使用querySelectorAll()方法

var x = document.querySelectorAll("p.intro");

querySelectorAll()不支持IE8以及之前版本,ie果然是辣鸡

通过对象集 来找元素
例子:通过发现表单id为frm1的元素,再遍历元素中的值获取后innerHTML添加内容

var x = document.forms["frm1"];
var text = "";
var i;
for (i = 0; i < x.length; i++) {
    text += x.elements[i].value + "<br>";
}
document.getElementById("demo").innerHTML = text;

下面的HTML Object和对象集 也可以访问进入使用

document.anchors
document.body
document.documentElement
document.embeds
document.forms
document.head
document.images
document.links
document.scripts
document.title

JavaScript HTML DOM - Changing HTML

HTML DOM 允许JavaScript 改变page element 内容

改变HTML的输出流
Javascript 能创建 dynamic(动态) 的html内容,通过document.write()直接作为HTML 的输出流
例子:输出时间

<!DOCTYPE html>
<html>
<body>
<script>
document.write(Date());
</script>
</body>
</html>

注意在加载文档之后不要使用document.write(),这会覆盖之前的文档内容

改变HTML内容
使用inner HTML来修改HTML Element 的content 是 easiest way
syntax(语法):

document.getElementById(id).innerHTML = new HTML

改变属性的值
改变HTML属性值的语法:

document.getElementById(id).attribute = new value


<!DOCTYPE html><html><body>     <img id="myImage" src="smiley.gif">
<script>                  document.getElementById("myImage").src = "landscape.jpg";       </script>
</body></html>

JavaScript HTML DOM - Changing CSS

HTML DOM 允许JavaScript改变HTML elements的Style

改变HTML 的Style
我们要改变HTML元素风格的使用的语法:

document.getElementById(id).style.property = new style

通过下面的例子来改变元素p的Style

<html><body>
<p id="p2">Hello World!</p>
<script>
document.getElementById("p2").style.color = "blue";
</script>
<p>The paragraph above was changed by a script.</p>
</body></html>

利用事件

HTML DOM 允许你在事件发生时执行代码
事件是HTML元素在浏览器上”things happen”(事件发生)时生成的

  • 元素的点击
  • 页面的加载
  • 字段的改变

你会了解很多的事件
下面这个例子改变了HTML Element Style 对于id=”id1”的标签,(在点击这个按钮时

<!DOCTYPE html><html><body>
<h1 id="id1">My Heading 1</h1>
<button type="button" 
onclick="document.getElementById('id1').style.color = 'red'">Click Me!
</button>
</body></html>

上面这个例子讲事件封装在button中

JavaScript HTML DOM Animation

了解如何使用Javascript创建HTML动画

一个基础的web页面中,所有的动画应当都基于一个容器
分别创建容器样式的风格,以及动画样式的Style
动画通过计时器控制,若计时器间隔够小则会让动画看起来十分连续

var id = setInterval(frame, 5);
function frame() {  
if (/* test for finished */) {  
  • clearInterval(id);

    } else {
    / code to change the element style /
    }
    }

    动画执行顺序

  • 获取动画标签对象

  • 设置一个源点(计时)
  • 设置间隔(frame,5)参数1是动作,参数2是间隔
  • 设置一个动作函数,并设置出点(否则会死循环),若完成动作则使用clearInterval(id)退出,id为setInterval(1,2)的对象
  • 此时一个简单动画完成
  • 安利一个tween.js的外部库

JavaScript HTML DOM Events

HTML DOM 允许JavaScript对于事件做出反应

对事件做出反应?
当用户点击HTML Elements 时候JavaScript能通过code执行做出相应的反应

HTML 事件的例子

  • 点击鼠标
  • 页面加载
  • 图片加载
  • 鼠标移动到某个元素
  • 表单提交
  • 敲击键盘

我们可以通过封装事件在标签中,或者script的函数中来实现监听效果

可以通过分配事件属性给HTML元素
分配一个onclick事件给一个按钮元素

<button onclick="displayDate()">Try it</button>

指定使用HTML DOM 事件
HTML DOM 允许你使用JavaScript事件分配给HTML元素
例如,我们指定一个onclick事件给按钮元素

<script>
document.getElementById("myBtn").onclick = displayDate;</script>

上述例子为,将分配一个onclick事件给id为MyBth的标签对象在点击时执行名为displayDate的函数

加载页面和离开页面事件 onload and onunload events
这两个事件在进入和离开page时发生
onload 可以用来检测访问者浏览器的版本的类型,然后加载对应的版本信息渲染在web page
这两个函数也可以用来处理cookies
例子:

onchange 事件
onchange 事件常常使用在输入字段的验证

<input type="text" id="fname" onchange="upperCase()">

上述例子中,通过在script中使用toUpperCase() 将小写转换成大写

onmouseover and onmouseout 会在鼠标在标签对象上或离开标签对象上时发生

onmousedown and onmouseup and onclick 事件是所有的mouse-click,第一个会在鼠标点击的时候发生,第二个会在鼠标释放的时候发生,第三个会在鼠标点击完成后发生

JavaScript HTML DOM EventListener

添加一个监听方法
The addEventListener() method

//当用户点击按钮的时候触发时间监听   document.getElementById("myBth").addEventListener("click",displayDate)

1.addEventListener()将时间处理程序添加到指定的元素上

2.且它不会覆盖已有的事件处理程序

3.你可以给除了HTML 元素的其他元素如windows object等某一元素添加多个处理事件(也可以是同一触发条件触发的多个事件处理程序)

4.它同样可以更容易的处理和控制事件的冒泡行为

5.使用它的时候可以为你带来更好的可读性,且JavaScript于HTML标记分离开处理,允许你添加事件监听,即便你不控制HTML的标记

6.你可以使用它更简单的移除掉事件监听 通过removeEventListener()

Syntax:

element.addEventListener(event, function, useCapture);

first parameter : 事件类型,”click” or “mousedown”..
secand parameter : 处理函数
third parameter : 是否指定冒泡捕获,用Boolean value 确定,可选参数

onclick != click
click 是对象的方法, onclick是事件,
我们在点击按钮时会先执行onclick 然后执行click,因为onclick是点击事件,首先触发事件,然后触发事件的点击方法,
得出,我们即便不添加点击方法(click) 也会触发点击事件~~~

给一个元素添加一个事件处理程序

让一个元素在触发点击方法的时候弹出“hello world”的alert

element.addEventListener("click", function(){ alert("Hello World!"); });

当然 ,你也可以引用外部函数

element.addEventListener("click", myFunction);
function myFunction() {
alert ("Hello World!");
}

给同一个元素添加多个事件处理程序

element.addEventListener("click", myFunction);
element.addEventListener("click", mySecondFunction);

此时会按照程序顺序依次执行事件处理程序

将不同类型的处理函数添加到同一元素中

element.addEventListener("mouseover", myFunction);
element.addEventListener("click", mySecondFunction);
element.addEventListener("mouseout", myThirdFunction);

在window object上添加事件处理程序

你可以在任何HTML DOM 上使用addEventListener()添加事件监听处理,(如:xmlHttpRequest Object

用户改变窗口大小时的事件监听

window.addEventListener("resize", function(){  
document.getElementById("demo").innerHTML = sometext;
});

传递参数
在用户触发事件时可做传递参数的函数使用

element.addEventListener("click", function(){ myFunction(p1, p2); });

事件的冒泡和捕获?

HTML DOM 中有两种方式传递事件,1. 冒泡 2.捕获
事件的传播是一种定义元素发生时事件时顺序的的方法??
例如:

中

的click被点击,先触发那个的click?

所以我们可以通过第三个参数来控制,当为false时则采用冒泡,

若为ture时 则采用捕获

document.getElementById("myP").addEventListener("click", myFunction, true);
document.getElementById("myDiv").addEventListener("click", myFunction, true);

可以通过removeEventListener()来移除已有的处理程序

DOM Nodes

根据W3C标准,一切东西在HTML document中都是一个Node(节点)

  • 文档是文档节点
  • 所有的元素是元素节点
  • 在HTML 元素中的文本是文本节点
  • 所有的属性是属性节点(弃用)
  • 所有的注释都是注释节点

JavaScript能访问所有存在于节点数中的节点
可以对节点进行增删改的操作

节点之间的关系

显而易见,结点之间有着层级关系

他们之间通过,parent,child,sibling来组成的关系网

  • 在节点树种,最顶上的节点就是root,称为根节点
  • 除根节点之外,所有的节点都有一个爸爸节点parent
  • 一个节点可以有很多的子节点
  • siblings 有相同的parent

节点与节点之间的跳转,导航

JavaScript可以使用以下一些属性在节点直接跳转

  • parentNode//爸爸节点
  • childNodes[nodenumber] //儿子们节点
  • firstChild //第一个儿子节点
  • lastChild//最后一个儿子节点
  • nextSibling //下一个兄弟节点
  • perviousSibling//上一个兄弟节点
  • 小操作:获取到你爸爸节点的儿子们节点,排除自己就能获取到所有的兄弟节点辣

子节点和节点值
DOM 经常会让你想获取的期望节点种含有文本
元素节点中的文本节点可以通过innerHTML访问
innerHTML方法和访问元素节点的第一个子节点的nodeValue的值一样
或者直接使用childNodes[0].nodeValue 的结果一样

nodeName Property总是会返回一个大写的tag name
nodeValue 返回一个指定节点的值

  • 如果是一个元素节点则返回null
  • 如果是一个文本节点则返回文本
  • 如果是一个属性节点,则返回属性的值

nodeType Property 返回节点的类型

  • ELEMENT_NODE === 1
  • ATTRIBUTE_NODE === 2
  • TEXT_NODE === 3
  • COMMENT_NODE === 8
  • DOCUMENT_NODE === 9
  • DOCUMENT_TYPE_NODE === 10

JavaScript HTML DOM Element(Nodes)

添加或者删除元素节点

创建一个新的元素节点首先需要创建一个元素,然后将这个元素添加到已有的元素当中去

document.createElement(TagName)
document.createTextNode(TextContent)
appendChild(Node)
element.appendChild(NodeElement)

创建一个新的元素—->insertBefore()

appendChild()方法在上面的列子中,添加了一个新的元素在parent的last Children
如果你不想那样,则可以使用insertBefore()方法
parent.insertBefore(newNode,child)//将newNode节点添加到child之前

删除一个已有的元素
删除一个已有的元素,你首先得知道它的父亲元素

var parent = document.getElementById("div1");
var child = document.getElementById("p1");
parent.removeChild(child);

//IE所有的版本都不兼容node.remove()方法

替换某个元素

如果你要在HTML DOM中替换某个元素,就使用replaceChild() 方法
first find parent element then find 你要替换的元素,然后通过你已经创建好的新元素使用replaceChild(para,child)来替换

var para = document.createElement("p");
var node = document.createTextNode("This is new.");
para.appendChild(node);
var parent = document.getElementById("div1");
var child = document.getElementById("p1");
parent.replaceChild(para, child);

JavaScript HTML DOM Colection

对于HTMLCollection 对象

对于getElementByTagName()方法,他会return一个HTMLCollection对象
一个HTMLCollection 对象是一个在HTML Element中的一个类似数组的列表(collection)

Example:

var x = document.getElementByTagName(Tag)

我们可以使用index number来访问collection的元素
例如 访问第二个tag元素我们可以这样写:

y = x[1]//index number 从 0 开始

HTML 中HTMLCollection 的长度

对于length属性是在colection中的元素数量

   var myCollection = document.getElementsByTagName("p");
document.getElementById("demo").innerHTML = myCollection.length;

1. 创建一个p的collection
2. 获取到collection的长度

长度的作用 可以让你loop完所有的元素 好用的一匹

var myCollection = document.getElementsByTagName("p");
var i;
for (i = 0; i < myCollection.length; i++) {  
myCollection[i].style.backgroundColor = "red";
}

An HTMLCollection is NOT an array!
HTML collection 不是不是不是一个数组啊啊啊!!
它看起来像,但它不是
你可以遍历列表和get单个元素,这让他看起来像一个数组
然鹅,你不能在HTMLCollection上使用Array的方法
push pop valueOf join …. 这些都不行

JavaScript HTML DOM Node Lists

关于HTML DOM Nodelist 对象

  • NodeList 对象是一个List(collection)它从document中提取出来
  • NodeList 对象几乎等同于HTMLCollection 对象
  • 一些浏览器会返回NodeList对象来代替HTMLCollection对象对于getElementByClassName()方法
  • 所有浏览器使用childNodes方法都会返回NodeList对象
  • 大部分的浏览器使用querySelectorAll()方法会返回一个NodeList对象

HTML DOM Node List Length
MyNodelist.length

HTMLCollection 和 NodeList 有什么不同

  1. HTMLCollection是collection的HTML元素
  2. NodeList是collection的Document节点
  3. NodeList和HTML collection有很多相同的东西(功能)
  4. HTMLCollection和NodeList都是类似数组的集合
  5. 两者都有length,用于记录列表中的item数目
  6. 两个都提供了index(0,1,2,3,4..)访问
  7. 可以通过items name id 来访问HTMLCollection
  8. NodeList只能通过索引访问
  9. 只有NodeList含有属性节点和文本节点

Untitled

Posted on 2019-04-30

浅析JavaScript对象以及原型链路

1. 对象

在JavaScript中大多事物都是对象,小到字符串、数组,大到自己建立在JavaScript之上的浏览器的API。当然,你也可以建立自己的对象,独一无二或忠于程序本身..;学习对象,这也是理解以及学习面向对象(Object-oriented)必不可少的

1.1. 对象基础

对象是一个包含相关数据或方法的集合,通常由一些变量和方法组成,我们称它为对象中的属性和方法(对象.方法,对象.变量)↓↓↓↓↓↓↓↓↓↓如下创建一个简单对象↓↓↓↓↓↓↓↓↓↓
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var person = {
name : ['Bob', 'Smith'],
age : 32,
gender : 'male',
interests : ['music', 'skiing'],
bio : function() {
alert(this.name[0] + ' ' + this.name[1] + ' is ' + this.age + ' years old. He likes ' + this.interests[0] + ' and ' + this.interests[1] + '.');
},
greeting: function() {
alert('Hi! I\'m ' + this.name[0] + '.');
}};

//再输入如下命令 , 我们发现变量和方法的调用并没有什么不一样,其中需要注意的是,JavaScript对象中的key永远是一个字符串类型,无论是否加上了引号
person.name[0]
person.age
person.interests[1]
person.bio()
person.greeting()

1.2. 点表示法

在上面的简单例子中,你使用到了(dot notation)点表示法来访问对象里的变量以及方法(同为key),这里 对象的名字 表现为一个命名空间(namespace),它必须写在第一位—-不然你是想调用谁的谁呢?( 接着是一个点(.),紧接着是你想要访问的项目,标识可以是简单属性的名字,或者是数组属性的一个元素又或者是方法的调用(根据你当前情况而定~)
1
2
3
person.age
person.interests[1]
person.bio()
1.2.1. 子命名空间
当然 你甚至可以再对象中再定义一个对象,则你对象中的对象名为你对象中对象属性(方法)的命名空间

或许这很好理解…

1.3. 括号表示法

另外一种访问属性的方式是使用括号表示法(bracket notation),替代这样的代码
曾经
person.age
person.name.first

现在
person['age']
person['name']['first']
这看起来就像是再调用数组的元素—从根本上说这就是一回事儿,你使用了关联值的名字,而不是索引去选择元素——难怪有时候数组又称之为关联数组(associative array)了(,对象做到了字符串到值的映射,而数组则是做的数字(索引)到值的映射

1.4. 设置对象成员

目前我们从初始化一个对象到如何调用已经了如指掌—-我们开始学习如何设置对象成员的值,通过声明你要设置的成员,向这样↓↓↓↓↓↓↓↓↓↓
person.age = 45
person['name']['last'] = 'Cratchit'

这样,创建新的成员
person['eyes'] = 'hazel'
person.farewell = function() { alert("Bye everybody!") }
括号表示法一个有用的地方是它不仅可以动态的去设置对象成员的值,还可以动态的去设置成员的名字。比如说,我们想让用户能够在他们的数据里存储自己定义的值类型,通过两个input框来输入成员的名字和值,通过以下代码获取用户输入的值:
var myDataName = nameInput.value
var myDataValue = nameValue.value

我们可以这样把这个新的成员的名字和值加到person对象里:
person[myDataName] = myDataValue

这是使用点表示法无法做到的,点表示法只能接受字面量的成员的名字,不接受变量作为名字。

1.5. “this”的含义

你也许在我们的方法里注意到了一些奇怪的地方,看这个例子:
greeting: function() {
  alert('Hi! I\'m ' + this.name.first + '.');
  }
你也许想知道”this”是什么,关键字”this”指向了当前代码运行时的对象( 原文:the current object the code is being written inside )——这里即指person对象,为什么不直接写person呢?当你学到下一篇Object-oriented JavaScript for beginners文章时,我们开始使用构造器(construnctor)时,”this”是非常有用的——它保证了当代码的上下文(context)改变时变量的值的正确性(比如:不同的person对象拥有不同的name这个属性,很明显greeting这个方法需要使用的是它们自己的name)。
让我们以两个简单的person对象来说明:
var person1 = {
  name : 'Chris',
  greeting: function() {
    alert('Hi! I\'m ' + this.name + '.');
  }}

var person2 = {
  name : 'Brian',
  greeting: function() {
    alert('Hi! I\'m ' + this.name + '.');
  }}

在这里,person1.greeting()会输出:”Hi! I’m Chris.”;person2.greeting()会输出:”Hi! I’m Brain.”,即使greeting这个方法的代码是一样的。就像我们之前说的,this 指向了代码所在的对象(其实代码运行时所在的对象)。在字面量的对象里this看起来不是很有用,但是当你动态创建一个对象(例如使用构造器)时它是非常有用的,之后你会更清楚它的用途。

1.6 你一直在使用对象

通过上述这些例子已经了解到了对象的基本情况,接下来会发现再学习JavaScript的过程中对象将贯穿你的一生
使用字符串prototype的方法
myString.split('sep')//sep是分隔符

使用document. API的时候
var myDiv = document.createElement('div');
var myVideo = document.querySelector('video');

你正在使用Document实例上可用的方法。每个页面在加载完毕后,会有一个Document的实例被创建,叫做document,它代表了整个页面的结构,内容和一些功能,比如页面的URL。同样的,这意味document有一些可用的方法和属性。这同样适用许多其他内建的对象或API,你使用过有—— Array,Math, 等。请注意内建的对象或API不会总是自动地创建对象的实例,举例来说,这个 Notifications API——允许浏览器发起系统通知,需要你为每一个你想发起的通知都使用构造器进行实例化。尝试在JavaScript终端里输入以下代码

var myNotification = new Notification('Hello!');

> 关于面向对象的操作就不再多做赘述

> 构造函数,多态,重写, 这里需要注意的是JavaScript中可以通过一个已有的对象来创建一个新的对象Create()函数
var person2 = Object.create(person1);

> 2. Proto 原型链

通过原型这种机制,JavaScript 中的对象从其他对象继承功能特性;这种继承机制与经典的面向对象编程语言的继承机制不同。本文将探讨这些差别,解释原型链如何工作,并了解如何通过 prototype 属性向已有的构造器添加方法

2.1. 基于原型的语言?

JavaScript 常被描述为一种基于原型的语言 (prototype-based language)——每个对象拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。

原型对象也可能拥有原型,并从中继承方法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。

准确地说,这些属性和方法定义在Object的构造器函数(constructor functions)之上的prototype属性上,而非对象实例本身。在传统的 OOP 中,首先定义“类”,此后创建对象实例时,类中定义的所有属性和方法都被复制到实例中。在 JavaScript 中并不如此复制——而是在对象实例和它的构造器之间建立一个链接(它是proto属性,是从构造函数的prototype属性派生的),之后通过上溯原型链,在构造器中找到这些属性和方法。

注意: 理解对象的原型(可以通过Object.getPrototypeOf(obj)或者已被弃用的proto属性获得)与构造函数的prototype属性之间的区别是很重要的。
前者是每个实例上都有的属性,后者是构造函数的属性。也就是说,Object.getPrototypeOf(new Foobar())和Foobar.prototype指向着同一个对象。

具体实验

var obj = new func();
obj.proto === func().prototype
var o = new func().prototype;
o.proto === func().prototype.proto

注意:必须重申,原型链中的方法和属性没有被复制到其他对象——它们被访问需要通过前面所说的“原型链”的方式。

注意:没有官方的方法用于直接访问一个对象的原型对象——原型链中的“连接”被定义在一个内部属性中,在 JavaScript 语言标准中用 [[prototype]] 表示(参见 ECMAScript)。然而,大多数现代浏览器还是提供了一个名为 proto (前后各有2个下划线)的属性,其包含了对象的原型。你可以尝试输入 person1.proto 和 person1.proto.proto,看看代码中的原型链是什么样的!

prototype 属性大概是 JavaScript 中最容易混淆的名称之一。你可能会认为,this 关键字指向当前对象的原型对象,其实不是(还记得么?原型对象是一个内部对象,应当使用 proto 访问)。prototype 属性包含(指向)一个对象,你在这个对象中定义需要被继承的成员。

之前我们做过实验

我们曾经讲过如何用 Object.create() 方法创建新的对象实例。

var person2 = Object.create(person1);   

person2.__proto__ == person1
true

constructor 属性

每个实例对象都从原型中继承了一个constructor属性,该属性指向了用于构造此实例对象的构造函数。

一个小技巧是,你可以在 constructor 属性的末尾添加一对圆括号(括号中包含所需的参数),从而用这个构造器创建另一个对象实例。毕竟构造器是一个函数,故可以通过圆括号调用;只需在前面添加 new 关键字,便能将此函数作为构造器使用。 —————-这显然没有什么屁用

var person3 = new person1.constructor('Karen', 'Stephenson', 26, 'female', ['playing drums', 'mountain climbing']);
正常工作。通常你不会去用这种方法创建新的实例;但如果你刚好因为某些原因没有原始构造器的引用,那么这种方法就很有用了。此外,constructor 属性还有其他用途。比如,想要获得某个对象实例的构造器的名字,
可以这么用
instanceName.constructor.name 
具体 
person1.constructor.name

flask+redies+mysql

Posted on 2019-03-21

flask+ redis 问题

链接redis 时候出现SQLALCHEMY_TRACK_MODIFICATIONS报错

回退版本 Flask_sqlalchey 2.2 >> 2.1

1
`track_modifications = app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] 报错,需要进行flask的sqlalchemy版本进行回退操作语句 pip install Flask-SQLAlchemy==2.1  `

flask 连接数据库

setting.py 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
DIALECT = 'mysql'
    DRIVER = 'pymysql'
    USERNAME = 'root'
    PASSWORD = '123456'
    HOST = '127.0.0.1'
    PORT = '3306'
    DATABASE = 'cms'
 
    SQLALCHEMY_DATABASE_URI = '{}+{}://{}:{}@{}:{}/{}?charset=utf8'.format(
        DIALECT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE
    )
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    SQLALCHEMY_TRACK_MODIFICATIONS = True

manage.py 连接数据库

1
2
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)

models.py 创建表

1
2
3
4
5
6
7
from manage import db

class User(db.Model):
pass

class CodeCountRecord(db.Model):
pass

数据迁移 Django 也有这个migrate 还不用下载 美滋滋

pip安装flask-script , flask-migrate

modle.py 对于表的操作流程(在一个文件中是这样).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate,MigrateCommand

app = Flask(__name__)
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = '你的数据库路径(相关格式百度)' #使用你的数据库
db = SQLAlchemy(app) #ORM

migrate = Migrate(app,db)
manager = Manager(app)
manager.add_command('db',MigrateCommand) #添加db 命令(runserver的用法)

#一个用户表
class User(db.Model):
...
...
省略

if __name__ == '__main__':
manager.run()

在命令行界面 运行如下代码

1
2
3
4
5
6
7
8
9
python main.py db init  #创建数据表。并且会在你项目下生成migrations/目录,保存你数据库每次变更的内容。


python main.py db migrate #提交修改

python main.py db upgrade #执行修改 

再看User表,已经改变。 
python main.py db downgrade #回退修改

使用flask迁移数据库,二次创建表问题

那么只需在模型类里面添加语句
table_args = {"extend_existing": True}


参考博客

二次建表
数据库连接+迁移
数据连库接+迁移2
使用falsk_SQLAlchemy连接MySQL
flask报错 KeyError ‘SQLALCHEMY_TRACK_MODIFICATIONS’.md (还是回退版本好用~)

css-history

Posted on 2019-03-10

*css-base

目录

1.CSS历史

2.CSS进阶

3.CSS学习

1.CSS历史

  • 1994年哈肯·维姆·莱提出了CSS的最初建议。伯特·波斯(Bert Bos)当时正在设计一个叫做“Argo”的浏览器,他们决定一起合作设计CSS。

  • W3C 开始接管 CSS 。1997年初,W3C内组织了专门管CSS的工作组,其负责人是克里斯·里雷。

  • CSS 2.1——1998年5月W3C发表了CSS2。CSS2.1修改了CSS2中的一些错误,删除了其中基本不被支持的内容和增加了一些已有的浏览器的扩展内容。

  • CSS 3——从 2011 年开始 CSS 被分为多个模块单独升级,统称为 CSS 3。这些模块有:

    • CSS 选择器 level 3
    • CSS 媒体查询 level 3
    • CSS Color level 3
    • 更多请 搜索 CSS spec

2.三大CSS进(装)阶(X)

  • LESS CSS
    一种简化、功能更多的 CSS 语言 中文官网 英文官网
  • SASS
    一种简化、功能更多的 CSS 语言(请自行搜索中英文官网)
  • PostCSS
    一种 CSS 处理程序

3.CSS学习资料

  1. Google:关键字MDN
  2. CSS Tricks
  3. Google: 阮一峰 CSS
  4. 张鑫旭的CSS
  5. Codrops 炫酷CSS效果
  6. CSS揭秘
  7. CSS space ch
  8. Magic of CSS 免费在线书

Disable-cache

Posted on 2019-03-07

如果你更改了代码,却发现页面没有更新时

1. 打开当前页面的开发者工具

2. 点开Network

3. 勾选Disable Cache

4. 再关闭开发者工具前,缓存会一直被禁用

图解

easy-JavaScript

Posted on 2019-03-07

easy-js

#easy-javascript

目录

1. 第一个导航页面案例

2. 监听事件

3. js的七大类型

end. tips

1. 第一个导航页面案例

需要用到的一些函数
1. console.log() 打印 排错校验神器
2. while 循环 没什么好讲的
3. 字典与数组  没什么好讲的
4. document 文档 JavaScript常用函数方法
5. 通过给标签设置id在JavaScript中对标签进行操作
6. onkeypress 从键盘在document中输入数据后,获取所有键入值
7. location.href   当前页面链接 (可通过事件改写 进行跳转页面操作)
8. window.open(href)  从新窗口中打开网页

2. 监听事件

监听鼠标

···

//监听鼠标按下
document.onmousedown = function(x){
    console.log(x)
}

//监听鼠标移动
document.onmousemove = function(x){
    console.log(x)
}

//监听松开鼠标
document.onmouseup = function(x){
    console.log(x)
}

//监听鼠标点击某个对象
obj.onclick = function(x){
    console.log(x)
}

···

监听键盘

···

//监听键盘按下某个键
document.onkeypress = function(x){
    console.log(x)
}

···

监听错误

···

//监听某个对象的错误信息
obj.onerror = function(x){
    console.log(x)
}

···

3. JS的七大类型

1.number(数值类型)

2.string(用单双引号括起来)

3.undefined(常用于变量,可直接赋值于变量(推荐),或者对象)
    查看变量是否存在if(var in window){...code...}

4.null(常用于对象,也可以直接赋值于对象(推荐)|变量)

5.object(数组,列表包含于此,非基本类型的类型)

    可以通过delete删除对象key in和forin 查询打印等操作

6.boolean(真假)

7.symbol

tips:以及已经存在的函数方法  会有function 类型
可以通过typeof var 来查看变量类型

tips

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Q:为什么我设置了监听mouse(touch)却在设备上无法使用
A:或许你该看看该设配是否支持mouse(touch) 下面命令
document.body.ontouchstart !== undefined
undefine:未定义,不支持
null:未初始化,支持
//通过特性检测来解决问题
if(document.body.ontouchstart !== undefined){//特性检测
//监听touch
}else{
//监听mouse
}
Q:NULL和undefined的区别
A:一个变量没有被赋值则是undefined(更被js所接受)
一个对象object暂时不给值,则给一个NULL(推荐,也可以给undefined)
一个非对象值推荐给undefined(变量不赋给值默认Undefined,可写可不写)
NULL表示空对象,undefined表示非空对象

easy-Css

Posted on 2019-03-07

easy-Css

Cascading Sytle Sheets

层叠样式表

目录

1.几种CSS的引入方式

2. a标签踩坑

3. float的魅力

4. CSS的常用单位

5. CSS布局问题

end tips

做前端啊,要回使用各种测量工具,QQ截图,colorpix,FSCapture..


1. 几种CSS的引入方式

  1. 直接在标签内写(已经被淘汰)
    <body bgcolor="grey">第一种</body>
  2. 使用style属性
    <body style="background-color:grey">第二种</body>
    3.使用style标签 内联

    1
    2
    3
    4
    5
    6
    <style>
    body{
    background-color:grey;
    color:red;
    }
    </style>
  3. link标签 外联
    <link rel="stylesheet" href='外联样式表路径,绝对相对路径都行'>

  4. CSS样式表引入其他CSS样式表
    @import url(路径);

2. a标签踩坑

+ 取消下划线

text-decoration = none;

3. float的魅力

+ float的BUG
1
2
3
4
5
6
7
8
9
10
11
12
13
    在爸爸爸爸类属性元素上面添加

.clearfix::after{
content: '';
display: block;
clear: both;
}

在儿子元素上面添加你需要的flat就ok了

{
float:left;
}

4. CSS的常用单位

1. px 像素

2. em 相对长度单位

1. > em的大小不是固定的
2. > em是继承与父级元素size 

任意浏览器的默认字体高都是16px=1em(未经过调整);
12px = 0.75em 10px = 0.625em;

3. rem CSS新增的相对单位(相对根元素)

  • 对于只需要适配少部分手机设备,且分辨率对页面影响不大的,使用px即可 。
  • 对于需要适配各种移动设备,使用rem,例如只需要适配iPhone和iPad等分辨率差别比较挺大的设备。

4. % 宽泛的讲是对于父级元素的比例

  1. 对于普通定位元素就是我们理解的父元素
  2. 对于position: absolute;的元素是相对于已定位的父元素
  3. 对于position: fixed;的元素是相对于ViewPort(可视窗口)

5. vw

css3新单位,viewpoint width的缩写,视窗宽度,1vw等于视窗宽度的1%。举个例子:浏览器宽度1200px, 1 vw = 1200px/100 = 12 px。

6. vh

css3新单位,viewpoint height的缩写,视窗高度,1vh等于视窗高度的1%。举个例子:浏览器高度900px, 1 vh = 900px/100 = 9 px

7. vm

css3新单位,相对于视口的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vm举个例子:浏览器高度900px,宽度1200px,取最小的浏览器高度,1 vm = 900px/100 = 9 px。

5. CSS布局问题(超大量图文警告)

css的水平对齐&垂直对齐问题一直是让人摸不着头脑的知识,这一章节将让你深入了解css的对齐方法

1. 将会用到的关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1. margin 外边距
2. padding 内边距
3. auto 自动
4. top 上
5. right 右
6. bottom 下
7. left 左
8. float 浮动
9. table 表单
10. position 定位
11. relative 相对定位
12. absolute 绝对定位
12.5. fixed 固定定位
13. box-sizing 盒子样式
14. border-box 边框盒子 /具体可以在本篇博客收到具体解释
15. conten-box 内容盒子 /具体同上
16. display 陈列关键字
17. flex 伸缩模型
...
2.两栏布局理解以及具体实现方法

两个盒子平行布局

原样式

原样

float 实现

float

  • 这里要注意,float实现会导致元素错位和坍塌(如何解决)

    坍塌问题

2.绝对定位

绝对定位

  • 相对定位和绝对定位是什么?

    1
    2
    3
    4
    通常情况下 position 的默认值是static,就是没有定位。
    如果设置了position 其他属性那么就会脱离文档流
    则可以通过left top right bottom等操作进行对元素块的控制
    # 一般来说只有设置了position 才可以使用 top left等操作,z-index也无法生效
相对定位 raletive
  • 相对定位并不脱离文档流

    一般两个配合使用,但是也可以单独使用,需要注意的是,raletive在进行元素偏移以后仍然占据没有偏移之前的空间,(偏移不是边距,相当于∪)

相对定位.PNG

绝对定位 absolute
  • 绝对定位脱离文档流

1
2
在布置文档流中文件时,绝对定位元素不会占据空间。
绝对定位元素相对于最近的非static祖先元素做绝对定位,当这样的祖先元素不存在的时候,则相对ICB(initel container block 初始包含块)

捕获.PNG

2. 三栏布局

一般为两边固定,中间自适应

    1. 使用margin手动自适应 -_-||
      margin.PNG
    1. 使用左右栏浮动的方法再进行margin

左右栏浮动.PNG

    1. 使用flex布局实现(弹性盒子)

flex.PNG

    1. 使用table布局(将容器变为单元格子table-cell)
    • 高度由文档流决定
      捕获.PNG
    1. 使用gird布局(设置行高和列,与table有异曲同工之处)

gird布局.PNG

    1. 圣杯布局
      • 圣杯布局和双飞翼布局 实现的都是三栏布局,两边的盒子宽度固定,中间盒子自适应
    1. 双飞翼布局 (用的少,直接用flex就ok了 以后去面试的时候可以背一下~)

参考文献:

详解七种CSS布局方法
position mdn
float mdn
flex mdn
table mdn


end-tips(很杂,随便看看)

>  Q:  Html会把span之间所有的回车变成一个空格
        A:  放到同一行就完事啦~ 如果需要空格就加个margin嘛~

> Q:   Body会默认有一个外边距
        A:  干掉他,margin:0;

> Q:  padding是啥 咋用?
        A:  padding是元素内边距
        padding:上(top) 右(right) 下(bottom) 左(left);
        或者分开使用padding-top:20px;

> Q:   活用透明元素,虽然你看不见我,但我确实存在噢
        A:   border-top: 3px solid transparent;(举例不唯一)

> Q: 一个元素的高度是由什么决定的?
        A  : 是由内容决定
        tips:div 高度由其内部文档流元素的高度总和决定

       Q   : 文档流是什么?
            A: 文档内元素的流动方向
            tips:内联元素<span>从左往右流动,块级元素<div>从上往下流动

> Q: 前端怎么调试
        A:border

>Q : 不同于汉字,英文是无法自动换行的。那么我们如何在标签中实现同一个长单词的自动换行呢?
    A: word-break:break-all;(释:打断所有,把单词全部打断)


>Q : font-size:100px;到底是什么?
       A: 文本内容基线最高和最低的宽度,为100px

>Q : 为什么我的字体100px,但行高却不是这么多呢?
        A:浏览器会有一个建议行高,有的是1.4有的是1.21倍(跟字体有关,同样的字号,即便固定死了行高,也会有建议行高不同的情况)

>Q: 如果不同的span在同一个div下div的行高会怎样。
        A:以最大span建议行高为基本

>Q: 前端中span字体怎么对齐
        A: 默认基线对齐,四线谱~

>Q:如何避免以上这些关于行高的蠢问题?
        A: line-height设大一点(比内联的任何元素行高都大),字体选择一样的

>Q:咱宽高老是出问题 咋办?
    A:没事别设置height和width 100%和固定宽高,BUG的根源啊喂!QAQ

>Q: 居中好难鸭  有啥子简单方法咩?
       A:  margin-left:auto;
        margin-right:auto;
        /*so easy*/

>Q:  为啥我span设置了宽高但是没效果鸭?
       A:  span不能改变宽高啊笨蛋!!
       Q: 那可咋整啊?????
            A: 你可以把他设置成可以调整宽高的样子嘛~
                display:inner-block;

>Q:我这样设置宽高并且垂直水平居中 感觉自己贼厉害!!

                width: 70px;
                height: 29px;
                line-height: 29px;
                text-align: center;
      A: 新手!  看我

            padding: 4px 16.5px;  流弊不流弊
            但是由于机器不同,所以我们还是需要明确一下
            line-height:XXpx;

>Q: 如何尽量避免BUG???
    A: 尽量避免写宽高这两个奇怪的东西,我们由内向外来控制大小
    padding margin


>Q: position里面fixed和absolute有什么区别鸭!?
        A:fixed 相对于网页窗口绝对定位
          absolute 相对于离自己最近的relative祖先绝对定位

>Q: 为什么我 left 50%居中以后发现我的元素并没有真正居中
        A: 因为50%居中是按照你左边基准线对齐
            可以通过左移你元素一半宽度距离来实现视觉对齐

>Q:  为啥我float以后感jio我有些地方变窄了?
        A:  因为float会默认压缩鸭

>Q: border-box和content-box有什么区别鸭?
        A:  border-box 是包含padding,margin border的和的面积
            content-box 真正的面积是不把padding margin border包含在内容中的大小
>Q: 为啥我的内联元素在下设置了padding 和 margin 依然没有得到我想要的效果?
        A: 因为内联元素不是block 只能设置padding的左右间距不能改变上下,必须要设display:inline-block才能撑起来
           内联元素无法通过margin 0px auto;来达到居中效果,必须使用到他的父标签,在父标签上设置text-align:center才能实现居中

>Q:我想对所有的动画效果有一个延时进行 怎么办?
        A: transition: all Xs;

>Q: 如何将文字光标改成指针光标?
       A:  cursor: pointer;

>Q: 我对内联元素使用了display:inline-block;以后bottom会多出一小截距离咋办?
       A: 这是bug 我们可以使用vertical-align:top;来解决这个bug(有时候也不会出现这种bug)
>Q: 为什么我的body 无法占满屏幕 有间距
       A: 因为这是body自带的8像素margin

border-box

content-box

easy-Html

Posted on 2019-03-07

easy-github

Posted on 2019-03-07

本篇博客主要为 Git与GitHub的交互操作

目录

一、准备工作

1. 安装Git Bash

2. 配置Git Bash

3. 一定运行的命令

4. 配置GitHub

4. 1 进入Keys配置页

4. 2 生成🔒

5. 使用Git生成一个本地Key

二、使用Git

+ 三种方式

1. 初始化并创建仓库

2. bulabula~

3. 总结性发言

三、上传到 GitHub

1. 创建新的仓库(二中已完成)

2. 图操

3. 执行相关命令

3. 5 如果二次Edit file

4. 例子

5. Clone仓库到本地

4. 其他命令

一、准备工作

1. 安装Git Bash

下载链接提取码:uxb0

2.下面就随便配置一下界面字体什么


3. 在命令行运行下面这五句话

‘’’flow
git config –global user.name xxxxxx(把xxxxxx替换成你的英文名字随便什么都行)
git config –global user.email xxxxxx(把xxxxxx替换成你的邮箱跟github一致或者不一致也行)
git config –global push.default simple # 本来我写的是 matching,不过想了想可能 simple 更好
git config –global core.quotepath false #防止文件名变成数字
git config –global core.editor “vim” # 使用vim编辑提交信息

‘’’

4. 配置GitHub

1. 进入https://github.com/settings/keys (肯定得配置一个🔒和🔑嘛~

2. 咋在git上面生成一个🔒

1
2
3
ssh-keygen -t rsa -b 4096 -C "你的邮箱" (回车三次)
cat ~/.ssh/id_rsa.pub (复制key到key)
Add SSH key 配置完成~

5. Git运行

ssh -T git@github.com (输入yes~)

出现Permission denied (publickey).就是失败,Hi FrankFang! You’ve successfully authenticated, but GitHub does not provide shell access. 就说明你成功了!

ok、SSH key添加好了

1
2
3
4
一台电脑只需要一个SSH key
它用来访问你的仓库,all
如果你新买了一台电脑,就再用以上方法Add SSH key
如果你删除了key,就重新生成一个key,替换之前的key

二、使用git

+ 三种方式
   1. 只在本地使用
   2. 将本地文件上传到gayhub
   3. 将gayhub上的仓库下载或者clon
   4. gayhub?思想逐渐变gay

1. 初始化

1. 1 创建一个项目目录:mkdir git-demo-1
1. 2 进入目录 cd git-demo-1
1. 3 git init ,初始化,这句命令会在git-demo-1中创建一个.git目录
1. 4 ls -la 你就会看到.git目录,他就是一个仓库
1. 5 在git-demo-1目录中添加任意文件
    '''
    1. touch index.html
    2. mkdir css
    3. touch css/style.css
    '''
1. 6 运行git status -sb 可以看到文件前面有 ***??*** 号
   + ***这个问号的意思是,git不知道你要怎么对待这些变动***
1. 7 使用git add 将“变动”添加到【暂存区】
   + 你可以一个个的add
    ' 1. git add index.html '
    ' 2. git add css/style.css'
   + 你也可以一次性add
    ' 1. git add . '
1. 8 再次运行 git status -sb 可以看到 ***??*** 变成了 ***A***
    + A的意思是添加,告诉git这些文件我都要添加至仓库
1. 9 使用git commit -m "信息(任意)" 将 ***add*** 内容【正式提交】到本地仓库 并添加注释信息,方便以后查询
    + 一个个commit
       1. git commit index.html -m "添加index.html"
       2. git commit css/style.css -m "添加css/style.css"
    + 一次性commit
       1. git commit . -m "添加多个文件"

1. 10 再再次运行git status -sb ,发现没有文件变动,因为文件的变动已经记录至长裤
1. 11 使用 ***git log*** 查看历史变动
1. 10 若再次变动文件,保存变动后执行
    'git add 变动文件'
    'git commit -m "更新变动文件"'
1.11 ***git status -sb 查看文件变动信息***

总结

1. git init,初始化本地仓库 .git
2. git status -sb,显示当前所有文件的状态
3. git add 文件路径,用来将变动加到暂存区
4. git commit -m "信息",用来正式提交变动,提交至 .git 仓库
5. 如果有新的变动,我们只需要依次执行 git add xxx 和 git commit -m 'xxx' 两个命令即可。别看本教程废话那么多,其实就这一句有用!先 add 再 commit,行了,你学会 git 了。
6. git log 查看变更历史

三、上传到GitHub

1. 创建一个新的仓库(new时候什么都不选择才能得到真正空的仓库)
2. 下为图操
![点击SSH](https://video.jirengu.com/FqewHjBnXJH9_TAeV_JaC3gGVFsT "ssh")
![简单介绍](https://video.jirengu.com/Fta476rO6oPJIgxbIec8vINTZV3E)
## ***看图,点击 SSH 按钮,点击 SSH 按钮,点击 SSH 按钮,我想你现在肯定不会忘了点击 SSH 按钮了吧~~~~如果不点击这个按钮,你就会使用默认的 HTTPS 地址。但是千万不要使用 HTTPS 地址,因为 HTTPS 地址使用起来特别麻烦,每次都要输入密码,而 SSH 不用输入用户名密码。为什么 SSH 不用密码呢,因为你已经上传了 SSH public key。还记得吗?***
3. 我们已经有了本地仓库 于是
    1. 找到图中的「…or push an existing repository from the command line」这一行,你会看到 git remote add origin https://github.com/xxxxxxxxxx/git-demo-1.git, 如果你发现这个地址是 https 开头的,那你就做错了,还记得吗,我们要使用 SSH 地址,GitHub 的 SSH 地址是以 git@github.com 开头的。
    2. 再次「点击 SSH按钮」,点击之后,整个世界就会变得美好起来
    3. 得到新的命令 git remote add origin git@github.com:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/git-demo-1.git,复制并运行它
    4. 复制第二行 git push -u origin master,运行它
    5. 刷新当前页面,你的仓库就上传到 GitHub 了!

如何上传更新(上传时候添加一个.gitignore的文件里面添加你想要忽视的文件或者文件夹,则可以再commit时候忽略掉)

‘’’
git add 文件路径
git commit -m “信息”
git pull (如果其他人提前更新仓库,你得先下载(更新)仓库)
git push
‘’’

###例子
‘’’
cd git-demo-1
touch index2.html
git add index2.html
git commit -m “新建 index2.html”
git pull
git push
‘’’

如何下载Github已有的仓库到本地

图解

  1. 关键命令 git clone
    下载

开始clone

  1. 确保弹出层里的地址是 SSH 地址,也就是 git@github.com 开头的地址,如果不是,就点击 Use SSH 按钮。然后复制这个地址。
  2. 打开 Git Bash,找一个安全的目录,比如 ~/Desktop 桌面目录就很安全:cd ~/Desktop。运行。
  3. 运行 git clone 你刚才得到的以git@github.com开头的地址,运行完了你就会发现,桌面上多出一个 git-demo-2 目录。
  4. 进入这个多出来的目录
  5. 运行 ls -la 你会看到,远程目录的所有文件都在这里出现了,另外你还看到了 .git 本地仓库。这是你就可以添加文件,git add,然后 git commit 了。

4.其他命令

  • git remote add origin git@github.com:xxxxxxx.git 将本地仓库与远程仓库关联
  • git remote set-url origin git@github.com:xxxxx.git 上一步手抖了,可以用这个命令来挽回
  • git branch 新建分支
  • git merge 合并分支
  • git stash 通灵术
  • git stash pop 反转通灵术
  • git revert 后悔了
  • git reset 另一种后悔了
  • git diff 查看详细变化

easy_MakeDown

Posted on 2019-03-07

本篇博客为Hexo不完全语法

目录

1. 字体介绍

2. 分级标题

3. 超链接

4. 列表

5. 插图

6. 表格

7. 引用

8. 代码

9. 流程图

1. 字体介绍

这是斜体 或 这也是斜体
这是粗体
这是加粗斜体
这是删除线

我是黑体字
我是微软雅黑
我是华文彩云
color=#0099ff size=72 face=”黑体”
color=#00ffff
color=gray

2. 分级标题

一级标题

二级标题

三级标题

四级标题

五级标题
六级标题

3. 超链接

写法:

我的博客地址https://itleeyw.github.io/

海贼王

小破站

4. 列表

  • 列表嵌套

    • 无序列表:
      写法:

      • 无序列表项1
      • 无序列表项2
      • 无序列表项3
    • 有序列表:
      写法:

      1. 有序列表项1
      2. 有序列表项2
      3. 有序列表项3

5. 插入图片

> 图片alt,图片alt就是显示在图片下面的文字,相当于对图片内容的解释。图片title是图片的标题,当鼠标移到图片上时显示的内容。title可加可不加

路飞

6. 表格

表头1 表头2 表头3 表头4
默认左对齐 左对齐 居中对其 右对齐
默认左对齐 左对齐 居中对其 右对齐
默认左对齐 左对齐 居中对其 右对齐

7. 引用

这是引用的内容(第一层)

这是引用引用的内容(第二层)

这是引用引用引用的内容(第四层)

貌似可以一直引用呢。。。

8. 代码

  • 语法
    • 单个代码
      代码内容
    • 代码块
      1
      2
      3
      代码1
      代码2
      代码3

9. 流程图 (无法显示什么鬼~)

`flow
st=>start: 开始
op=>operation: My Operation
cond=>condition: Yes or No?
e=>end
st->op->cond
cond(yes)->e
cond(no)->op
‘’’


123

Leeyw

23 posts
1 tags
© 2019 Leeyw
Powered by Hexo
|
Theme — NexT.Muse v5.1.4