var levels = [
{
helpTitle : "根据类型(type)来选择元素(element)",
selectorName : "类型选择器(Type Selector)",
doThis : "选中这些“盘子”(plate)",
selector : "plate",
syntax : "A",
help : "选中所有类型为 A 的元素。这里的“类型”即指标签(tag)的类型,也就是说, div 、 p 和 ul 都是不同的元素类型。",
examples : [
'div 选择所有的 div 元素。',
'p 选择所有的 p 元素。',
],
boardMarkup: `
`
},
{
doThis : "选中这些“便当盒”(bento box)",
selector : "bento",
syntax : "A",
helpTitle : "根据类型来选择元素",
selectorName : "类型选择器",
help : "选中所有类型为 A 的元素。这里的“类型”即指标签的类型,也就是说, div 、 p 和 ul 都是不同的元素类型。",
examples : [
'div 选择所有的 div 元素。',
'p 选择所有的 p 元素。',
],
boardMarkup: `
`
},
{
doThis : "选中那个“花边盘子”(fancy plate)",
selector : "#fancy",
selectorName: "ID 选择器(ID Selector)",
helpTitle: "根据元素的 ID 选择元素",
syntax: "#id",
help : '通过指定的id来选择元素,你也可以将它和类型选择器结合起来使用。',
examples : [
'#cool 选择具有这样属性的元素: id="cool" 。',
'ul#long 选择 ul id="long" 。'
],
boardMarkup : `
`
},
{
helpTitle: "选择一个在另一个元素之中的元素",
selectorName : "后代选择器(Descendant Selector)",
doThis : "选中“盘子”(plate)里的那个“苹果”(apple)",
selector : "plate apple",
syntax: "A B",
help : "选中所有 A 元素之中的 B 元素。B 在另一个元素之中,所以我们把它叫做“后代(descendant)”。",
examples : [
'p strong 选择所有 p 元素之中的 strong 元素。',
'#fancy span 选择 id="fancy" 之中的所有 span 元素。',
],
boardMarkup : `
`
},
{
doThis : "选中“花边盘子”(fancy plate)里的那块“酸黄瓜”(pickle)",
selector : "#fancy pickle",
helpTitle: "结合后代选择器和 ID 选择器",
syntax: "#id A",
help : '后代选择器可以用来结合任意选择器。',
examples : [
'#cool span 选择具有 id="cool" 这个属性的元素中的所有 span 元素。'
],
boardMarkup : `
`
},
{
doThis : "选中那些“小”(small)“苹果”(apple)",
selector : ".small",
selectorName: "类选择器(Class Selector)",
helpTitle: "根据元素的类(class)来选择元素",
syntax: ".classname",
help : '类选择器可以选中具有相应类的所有元素,每个元素只能有一个 ID ,但可以有多个类。',
examples : [
'.neato 选择所有具有这样属性的元素: class="neato" 。'
],
boardMarkup : `
`
},
{
doThis : "选中那些“小”(small)“橘子”(orange)",
selector : "orange.small",
helpTitle: "结合类选择器",
syntax: "A.className",
help : '你可以将类选择器与其他选择器(如类型选择器)结合。',
examples : [
'ul.important 选择所有具有这样属性的 ul 元素: class="important" 。',
'#big.wide 选择同时具有 id="big" 和 class="wide" 这两个属性的元素。'
],
boardMarkup :`
`
},
{
doThis : "选中那些“便当”(bento)里的“小”(small)“橘子”(orange)",
selector : "bento orange.small",
syntax: "好好想想,加油!",
helpTitle: "你可以的……",
help : '结合你之前这些关学到的知识干掉它!',
boardMarkup : `
`
},
{
doThis : "选中所有的“盘子”(plate)和便当(bento)",
selector : "plate,bento",
selectorName : "逗号结合器(Comma Combinator)",
helpTitle: "用逗号……把选择器……结合起来!",
syntax : "A, B",
help : '多亏了 Shatner 的黑科技,这个选择器可以选中所有的 A 元素和 B 元素。你可以用这种办法结合任意的选择器,两个以上也是可以的。',
examples: [
'p, .fun 选择所有的 p 元素以及所有这样的元素: class="fun" 。',
'a, p, div 选择所有的 a 、 p 和 div 元素。'
],
boardMarkup : `
`
},
{
doThis : "选中所有的东西!",
selector : "*",
selectorName: "全局选择器(The Universal Selector)",
helpTitle: "选中所有的元素!",
syntax : "*",
help : '你可以用全局选择器选择所有的元素!',
examples : [
'p * 选择 p 元素中的所有元素。',
],
boardMarkup : `
`
},
{
doThis : "选中“盘子”(plate)中的所有东西",
selector : "plate *",
syntax : "A *",
helpTitle: "结合全局选择器",
help : '这个选择器可以选择 A 元素中的所有元素。',
examples : [
'p * 选择所有 p 中的每个元素。',
'ul.fancy * 选择所有 ul class="fancy" 中的每个元素。'
],
boardMarkup: `
`
},
{
doThis : "选中所有紧随“盘子”(plate)之后“苹果”(apple)",
selector : "plate + apple",
helpTitle: "选择紧随某元素之后的元素",
selectorName: "相邻兄弟选择器(Adjacent Sibling Selector)",
syntax : "A + B",
help : "这个选择器选择所有紧随 A 之后的 B 元素。彼此紧靠的元素互为兄弟(sibling),它们的层级(或在 DOM 树中的深度)是相同的。
在这个关卡的 HTML 标记中,缩进层级相同的元素互为兄弟元素。",
examples : [
'p + .intro 选择所有紧随 p 元素之后的,并且具有 class="intro" 这个属性的元素。',
'div + a 选择所有紧随 div 元素之后的 a 元素。'
],
boardMarkup : `
`
},
{
selectorName: "通用兄弟选择器(General Sibling Selector)",
helpTitle: "选择跟在其它元素之后的元素",
syntax: "A ~ B",
doThis : "选择“便当”(bento)后面的“酸黄瓜”(pickle)",
selector : "bento ~ pickle",
help : "你可以选择所有跟随在一个元素之后的所有的兄弟元素。这和相邻兄弟选择器 (A + B) 类似,但是它获取的是随后的所有元素,而不仅仅是只获取一个。",
examples : [
'A ~ B 选择所有在 A 后面的 B。'
],
boardMarkup : `
`
},
{
selectorName: "子选择器(Child Selector)",
syntax: "A > B",
doThis : "选择直接放在“盘子”(plate)上的“苹果”(apple)",
selector : "plate > apple",
helpTitle: "选择元素的直接子元素",
help : "你可以选择别的元素的直接子元素。子元素(child element)是直接嵌套(nest)于别的元素下一级的元素。
比这个嵌套得更深的元素被称为“后代元素(descendant elements)”。",
examples : [
'A > B 选择所有父元素为 A 的 B'
],
boardMarkup: `
`
},
{
selectorName: "伪元素选择器:第一个子元素(First Child Pseudo-selector)",
helpTitle: "选择在某个元素之内的第一个子元素",
doThis : "选中“最上面的”(top)“橘子”(orange)",
selector : "plate :first-child",
syntax: ":first-child",
help : "你可以用这个选择第一个子元素。所谓子元素(Child element),就是直接嵌套于另一个元素的元素。你可以把伪元素选择器(Pseudo-selector)和其他选择器结合起来使用。",
examples : [
':first-child 选择所有第一个的子元素。',
'p:first-child 选择所有 p 标签的第一个子元素。',
'div p:first-child 选择所有 div 标签的子元素中第一个 p 元素。'
],
boardMarkup :`
`
},
{
selectorName: "伪元素选择器:唯一子元素(Only Child Pseudo-selector)",
helpTitle: "选择这样的元素:它(们)是另外一个元素中的唯一一个元素",
doThis : "选中盘子(plate)中的苹果(apple)和酸黄瓜(pickle)",
selector : "plate :only-child",
syntax: ":only-child",
help : "你可以选择这样的元素:它(们)是另外一个元素中的唯一一个元素。",
examples : [
'span:only-child 选择那些在另外一些元素中唯一的 span 元素。',
'ul li:only-child 选择那些在 ul 元素中唯一的 li 元素。'
],
boardMarkup : `
`
},
{
selectorName: "伪元素选择器:最后一个子元素(Last Child Pseudo-selector)",
helpTitle: "选中这样一些元素:它(们)是另一个元素中的最后一个子元素",
doThis : "选中“小的”(small)“苹果”(apple)和“酸黄瓜”(pickle)",
selector : ".small:last-child",
syntax: ":last-child",
help : "你可以选择这样的元素:它(们)是另一个元素中的最后一个子元素
提示 → 在那些只有一个元素的情况下,你把这个元素看作是第一个元素(first-child)、(only-child) 或是 (last-child) 都是可以的!",
examples : [
':last-child 选择所有作为最后一个子元素出现的元素。',
'span:last-child 选择所有元素中的最后一个 span 元素。',
'ul li:last-child 选择所有 ul 元素中的最后一个 li 元素。'
],
boardMarkup : `
`
},
{
selectorName: "伪元素选择器:第 N 个 元素(Nth Child Pseudo-selector)",
helpTitle: "通过元素在其父元素中的顺序来选择元素。",
doThis : "选中第三个“盘子”(plate)",
selector : ":nth-child(3)",
syntax: ":nth-child(A)",
help : "选中在另一元素中的第 n 个 (nth) (如: 第一个(1st), 第三个(3rd), 第十二个(12th) 等) 元素。",
examples : [
':nth-child(8) 选中每个元素中的第八个元素。',
'div p:nth-child(2) 选中每个 div 中的第二个 p 元素。',
],
boardMarkup : `
`
},
{
selectorName: "倒数第 N 个元素选择器(Nth Last Child Selector)",
helpTitle: "根据元素在其父元素中倒数的顺序来选择元素。",
doThis : "选中第一个便当(bento)",
selector : "bento:nth-last-child(3)",
syntax: ":nth-last-child(A)",
help : "从下往上选择子元素,这与 nth-child 很类似,但请注意是倒数!",
examples : [
':nth-last-child(2) 选择倒数第二个子元素。'
],
boardMarkup: `
`
},
{
selectorName: "“第一个某类”选择器(First of Type Selector)",
helpTitle: "选择第一个出现的某种类型的元素",
doThis : "选中第一个“苹果”(apple)",
selector : "apple:first-of-type",
syntax: ":first-of-type",
help : "选择其他元素中的第一个某种元素。",
examples : [
'span:first-of-type 选择任意元素中的第一个 span 元素。'
],
boardMarkup: `
`
},
{
selectorName: "“第 N 个某类”选择器(Nth of Type Selector)",
doThis: "选中所有第偶数个的盘子(plate)",
selector: "plate:nth-of-type(even)",
syntax: ":nth-of-type(A)",
help: "选中某元素中的某个特定位置的子元素,或第奇/偶数个某种管苏",
examples: [
'div:nth-of-type(2) 选中第二个 div 实例。',
'.example:nth-of-type(odd) 选中含有“example”类的第偶数个元素。'
],
boardMarkup : `
`
},
{
selectorName: "带公式的“第 N 个某类”选择器(Nth-of-type Selector with Formula)",
doThis: "从第三个盘子(plate)开始,选中每隔一个的盘子",
selector: "plate:nth-of-type(2n+3)",
syntax: ":nth-of-type(An+B)",
help: "这里的 nth-of-type 公式的意思是,从第 B 个某元素开始,选择每隔 (A-1) 个此元素。",
examples: [
'span:nth-of-type(6n+2) 从第 6 个 span 开始,每隔一个该元素就选中一个'
],
boardMarkup : `
`
},
{
selectorName: "类型选择器(Only of Type Selector)",
helpTitle: "选择的父元素内是否只有唯一的子元素",
selector : "apple:only-of-type",
syntax: ":only-of-type",
doThis : "选择在盘子(plate)中只有一个苹果(apple)",
help : "选择的元素中子元素是否唯一。",
examples : [
'p span:only-of-type 查找span 在任何 p 如果它是唯一的 span 在那里.'
],
boardMarkup: `
`
},
{
selectorName: "最终类型选择器(Last of Type Selector)",
helpTitle: "查找该类型元素的最后一个",
doThis : "查找着后一个苹果(apple)和橘子(orange)",
selector : ".small:last-of-type",
syntax: ":last-of-type",
help : "查找该类型元素的最后一个.记得一个类型是一个标签(tag),所以 p 和 span 是不同类型.
我觉得这也许也是在恐龙灭绝之前,选中他们中最后一种的办法。",
examples : [
'div:last-of-type选择最后一个 div 中的元素.',
'p span:last-of-type 选择最后一个 span 中的每一个 p.'
],
boardMarkup : `
`
},
{
selectorName: "空选择器(Empty Selector)",
helpTitle: "查找所有没有孩子的元素",
doThis : "查找全部孩子为空的便当(bento)",
selector : "bento:empty",
syntax: ":empty",
help : "查找所有元素里面没有任何其他元素在内.",
examples : [
'div:empty 查找所有内部为空 div 元素.'
],
boardMarkup:`
`
},
{
selectorName: "否定伪类选择器(Negation Pseudo-class)",
helpTitle: "选择所有否定的不匹配选择器的元素",
doThis : "查找所有大苹果(apple)",
selector : "apple:not(.small)",
syntax: ":not(X)",
help : '你可以使用这个去查找所有元素中不匹配的选择器"X".',
examples : [
':not(#fancy) 查找所有元素没有id="fancy"的属性.',
'div:not(:first-child) 选择每一个div div 排除掉不是第一个子元素(first child).',
':not(.big, .medium) 查找所有元素class中没有class="big" 或者 class="medium".'
],
boardMarkup: `
`
},
{
selectorName: "属性选择器(Attribute Selector)",
helpTitle: "查找所有元素是否有特定属性名",
doThis : "查找所有属性名为 for 的物品",
selector : "[for]",
syntax: "[attribute]",
help : '属性是出现在元素(element)中的一个标签(tag),就像这样:span attribute="value".并不总是一个属性有一个值,它可以是空白!',
examples : [
'a[href] 查找所有 a 标签元素它有一个 href="anything" 的属性值.',
'[type] 查找所有元素它有一个 type="anything"的属性.'
],
boardMarkup:`
`
},
{
selectorName: "属性选择器(Attribute Selector)",
helpTitle: "查找所有元素是否有特定属性名",
doThis : "查找所有盘子(plate)是否有 for 属性名",
selector : "plate[for]",
syntax: "A[attribute]",
help : "结合元素名字和属性的名字(就像标签名选择器(tag name selector))加入到它的最后.",
examples : [
'[value] 查找所有元素有一个 value="anything" 的属性.',
'a[href] 查找所有 a 标签元素它有一个 href="anything" 的属性.',
'input[disabled] 查找所有 input标签是否有 disabled 属性'
],
boardMarkup:`
`
},
{
selectorName: "属性值选择器(Attribute Value Selector)",
helpTitle: "选择所有元素属性值相等的元素",
doThis : "查找所有Vitaly的食品",
selector : "[for=Vitaly]",
syntax: '[attribute="value"]',
help : "属性选择器是一个大小写敏感, 内容完全匹配的选择器.",
examples : [
'input[type="checkbox"] 查找所有输入(input)为复选框(checkbox)的元素.'
],
boardMarkup:`
`
},
{
selectorName: "属性起始选择器(Attribute Starts With Selector)",
helpTitle: "查找所有对应元素中的属性值的开始是否包含特定字符的元素",
doThis : "查找元素中for属性名内容起始为'Sa'的元素",
selector : '[for^="Sa"]',
syntax: '[attribute^="value"]',
// help : "You can use quotes around the value in the selector, or not—it's optional!",
examples : [
'.toy[category^="Swim"] 选择所有元素 class为 toy 和它的属性 category="Swimwear 或者 category="Swimming".'
],
boardMarkup: `
`
},
{
selectorName: "属性结尾选择器(Attribute Ends With Selector)",
helpTitle: "查找所有对应元素中的属性值的结尾是否包含特定字符的元素",
doThis : "查找元素中for属性名内容结尾为'ato'的元素",
selector : '[for$="ato"]',
syntax: '[attribute$="value"]',
help : '',
examples : [
'img[src$=".jpg"] 显示查找所有图片中结尾为 .jpg 的图片.',
],
boardMarkup:`
`
},
{
selectorName: "属性通配符选择器(Attribute Wildcard Selector)",
helpTitle: "查找所有对应元素中的属性值是否包含特定字符的元素",
syntax: '[attribute*="value"]',
doThis : "查找所有元素和属性名内容中包含'obb'字符",
selector : '[for*="obb"]',
help : '如果属性选择器中有attribute*它能够去识别像 class, href 或者 src 的属性.',
examples : [
'img[src*="/thumbnails/"] 查找所有的img元素显示图片路径的来自"thumbnails"的文件.',
'[class*="heading"] 查找所有元素中class值为为"heading",像 class="main-heading" 和 class="sub-heading"'
],
boardMarkup:`
`
}
];