xmlplus
Version:
A JavaScript framwork for developing projects efficiently.
532 lines (413 loc) • 15.1 kB
Markdown
# DOM
## text
```js
text()
```
- `Returns` : `String` 获取到的文本
该函数用于获取组件对象的文本,它相当于获取相应 HTML 元素的 `textContent` 值。
```js
text(value)
```
- `value` : `String` 要设置的文本
- `Returns` : `SystemObject` 函数的调用者
该函数用于设置组件对象的文本,这需要分两种情况看待。其一,如果组件对象的子级仅包含一个文本对象,那么它相当于设置相应 HTML 元素的 `textContent` 值。其二,如果组件对象的子级包含多个对象,那么该函数会先移除所有的儿子对象,然后以给定的文本创建一个文本对象。
```js
// 03-01
Example: {
xml: "<h1 id='example'>hello</h1>",
fun: function (sys, items, opts) {
console.log(sys.example.text()); // hello
sys.example.text("world");
console.log(sys.example.text()); // world
}
}
```
## prop
```js
prop(propertyName)
```
- `propertyName` : `String` 要获取的属性的名称
- `Returns` : `String` 属性的值
该函数根据给定的属性名,获取组件对象的属性值。
```js
prop(propertyName,value)
```
- `propertyName` : `String` 要设置的属性的名称
- `value` : `String` 要设置的属性值
- `Returns` : `SystemObject` 函数的调用者
该函数根据给定的属性名,设置组件对象的属性值。
```js
// 03-02
Example: {
xml: "<input id='example' type='checkbox'/>",
fun: function (sys, items, opts) {
console.log(sys.example.prop("checked")); // false
sys.example.prop("checked", true);
console.log(sys.example.prop("checked")); // true
}
}
```
## removeProp
```js
removeProp(propertyName)
```
- `propertyName` : `String` 要删除的属性的名称
- `Returns` : `SystemObject` 函数的调用者
该函数用于删除组件对象给定属性。
```js
// 03-03
Example: {
xml: "<input id='example'/>",
fun: function (sys, items, opts) {
sys.example.prop("data", "hello,world");
console.log(sys.example.prop("data")); // hello,world
sys.example.removeProp("data");
console.log(sys.example.prop("data")); // undefined
}
}
```
## attr
```js
attr(attributeName)
```
- `attributeName` : `String` 要获取的属性的名称
- `Returns` : `String` 属性的值
该函数根据给定的属性名,获取组件对象的属性值。
```js
attr(attributeName,value)
```
- `attributeName` : `String` 要设置的属性的名称
- `value` : `String` 要设置的属性值
- `Returns` : `SystemObject` 函数的调用者
该函数根据给定的属性名,设置组件对象的属性值。
```js
// 03-04
Example: {
xml: "<input id='example'/>",
fun: function (sys, items, opts) {
console.log(sys.example.attr("data")); // null
sys.example.attr("data", "hello");
console.log(sys.example.attr("data")); // hello
}
}
```
## removeAttr
```js
removeAttr(attributeName)
```
- `attributeName` : `String` 要删除的属性的名称
- `Returns` : `SystemObject` 函数的调用者
该函数用于删除组件对象的给定属性。
```js
// 03-05
Example: {
xml: "<input id='example'/>",
fun: function (sys, items, opts) {
sys.example.attr("data", "hello");
console.log(sys.example.attr("data")); // hello
sys.example.removeAttr("data");
console.log(sys.example.attr("data")); // null
}
}
```
## addClass
```js
addClass(className[,context])
```
- `className` : `String` 要添加到 `class` 属性的一个类或多个空格分隔的类。
- `context` : `SystemObject` 指代上下文的系统对象
- `Returns` : `SystemObject` 函数的调用者
该函数用于给组件对象添加类,该类名可以是独立的,也可以是由多个空格分隔的类集合。其中可选的参数 `context` 是一系统对象,用于指明该对象的宿主组件标识符。该标识符会替换掉参数 `className` 中出现的符号 `#`。
默认情况下,`context` 为函数 `addClass` 的调用者,请看下面示例。
```js
// 03-06
Example: {
css: "#klass { color: blue; }",
xml: "<div id='example'>\
<Widget id='widget'/>\
<h1 id='text'>hello, world</h1>\
</div>",
fun: function (sys, items, opts) {
sys.text.addClass("#klass"); // 引用的是当前组件的 klass
}
},
Widget: {
css: "#klass { color: red; }",
xml: "<h1 id='widget'>hello, world</h1>",
fun: function (sys, items, opts) {
sys.widget.addClass("#klass", this); // 引用的是组件 Example 的 klass
}
}
```
注意,参数 `className` 中出现的符号 `#` 所代表的内容与样式项中出现的符号 `$` 所代表的内容一致。对于类名中出现的通配符,详细内容请参考 [样式项中的通配符](/docs#命名_样式项中的通配符)。
## removeClass
```js
removeClass([className])
```
- `className` : `String` 要从 `class` 属性删除的一个类或多个空格分隔的类。
- `Returns` : `SystemObject` 函数的调用者
该函数用于移除当前对象的相关类,该类名可以是独立的,也可以是由多个空格分隔类集合。如果不指定类名,则默认移除组件对象相关的所有类。
```js
// 03-07
Example: {
css: "#klass { color: blue; }",
xml: "<h1 id='example'>hello,world</h1>",
map: { nofragment: true },
fun: function (sys, items, opts) {
sys.example.addClass("#klass");
console.log(sys.example.css("color")); // rgb(0, 0, 255)
sys.example.removeClass("#klass");
console.log(sys.example.css("color")); // rgb(0, 0, 0)
}
}
```
注意,此示例中需要禁用文档碎片管理,否则语句 `sys.example.css("color")` 将返回空值。关于文档碎片的更多内容请参考 [使用文档碎片](/docs#优化_使用文档碎片)。
## contains
```js
contains(target)
```
- `target` : `HTMLElement | SystemObject`
- `Returns` : `Boolean`
该函数用于判定当前组件对象是否包含给定的对象。该函数的判定逻辑是,当前组件对象对应的 HTML 元素与给定对象对应的 HTML 元素存在上下级关系或者相等关系,那么该函数返回 `true`,否则返回 `false`。
```js
// 03-08
Example: {
xml: "<div id='example'>\
<h1 id='hello'>hello</h1>\
</div>",
fun: function (sys, items, opts) {
console.log(sys.example.contains(null)); // false
console.log(sys.example.contains(document.body)); // false
console.log(sys.example.contains(sys.example)); // true
console.log(sys.example.contains(sys.hello)); // true
console.log(sys.example.contains(sys.hello.elem())); // true
}
}
```
## css
```js
css(propertyName)
```
- `propertyName` : `String` 要获取的 CSS 属性名称
- `Returns` : `String` CSS 属性值
该函数根据给定的属性名,获取组件对象的 CSS 属性值。
```js
css(propertyName,value)
```
- `propertyName` : `String` 要设置的 CSS 属性名称
- `value` : `String` 要设置的 CSS 属性值
该函数根据给定的属性名,设置组件对象的 CSS 属性值。
```js
// 03-09
Example: {
xml: "<h1 id='example'>hello, world</h1>",
map: { nofragment: true },
fun: function (sys, items, opts) {
console.log(sys.example.css("color")); // rgb(0, 0, 0)
sys.example.css("color", "blue");
console.log(sys.example.css("color")); // blue
}
}
```
注意,此示例中需要禁用文档碎片管理,否则第一个获取颜色值的语句 `sys.example.css("color")` 将返回空值。关于文档碎片的更多内容请参考 [使用文档碎片](/docs#优化_使用文档碎片)。
## show
```js
show()
```
- `Returns` : `SystemObject` 函数的调用者
该函数用于显示组件对象。在服务端,它相当于移除相关 HTML 元素的 `display` 样式。在浏览器端,它会设定 `display` 样式为初始值。
```js
// 03-10
Example: {
css: "#hello { display: none; }",
xml: "<div id='example'>\
<h1 id='hello'>hello, world</h1>\
<button id='button'>show</button>\
</div>",
fun: function (sys, items, opts) {
sys.button.once("click", sys.hello.show);
}
}
```
## hide
```js
hide()
```
- `Returns` : `SystemObject` 函数的调用者
该函数用于隐藏组件对象,它相当于设定相关 HTML 元素的 `display` 样式值为 `none`。
```js
// 03-11
Example: {
xml: "<div id='example'>\
<h1 id='hello'>hello, world</h1>\
<button id='button'>hide</button>\
</div>",
fun: function (sys, items, opts) {
sys.button.once("click", sys.hello.hide);
}
}
```
## width
```js
width()
```
- `Returns` : `Number` 返回的宽度值
该函数用于获取组件对象的宽度值。
```js
width(value)
```
- `value` : `Number` 需要设定的宽度值
- `Returns` : `SystemObject` 函数的调用者
该函数用于设置组件对象的宽度值。
```js
// 03-12
Example: {
xml: "<h1 id='example'>hello, world</h1>",
map: { nofragment: true },
fun: function (sys, items, opts) {
sys.example.width(100);
console.log(sys.example.width());
}
}
```
注意,此示例中需要禁用文档碎片管理,否则语句 sys.example.width() 将返回 `0`。关于文档碎片的更多内容请参考 [使用文档碎片](/docs#优化_使用文档碎片)。
## height
```js
height()
```
- `Returns` : `Number` 返回的高度值
该函数用于获取组件对象的高度值。
```js
height(value)
```
- `value` : `Number` 需要设定的高度值
- `Returns` : `SystemObject` 函数的调用者
该函数用于设置组件对象的高度值。
```js
// 03-13
Example: {
xml: "<h1 id='example'>hello, world</h1>",
map: { nofragment: true },
fun: function (sys, items, opts) {
sys.example.height(100);
console.log(sys.example.height());
}
}
```
注意,此示例中需要禁用文档碎片管理,否则的语句 sys.example.height() 将返回 `0`。关于文档碎片的更多内容请参考 [使用文档碎片](/docs#优化_使用文档碎片)。
## offset
```js
offset()
```
- `Returns` : `PlainObject` 组件对象的偏移坐标
返回组件对象的偏移坐标。返回的对象包含两个整型属性:`top` 和 `left`,以像素计。此函数仅对可见元素有效。
```js
offset(value)
```
- `value` : `PlainObject` 要设置的偏移坐标对象
- `Returns` : `SystemObject` 函数的调用者
设置组件对象的偏移坐标。它可以是一个值对,比如 `{ top:100, left:0 }`,或者带有 `top` 和 `left` 属性的对象。
```js
// 03-14
Example: {
css: "#example { position: relative; }"
xml: "<div id='example'>\
<p id='text'>hello,world</p>\
</div>",
map: { nofragment: true },
fun: function (sys, items, opts) {
var offset = sys.example.offset();
console.log(offset.top, offset.left); // 16 8
sys.example.offset({top:100, left:0});
offset = sys.example.offset();
console.log(offset.top, offset.left); // 100 0
}
}
```
注意,此示例中需要禁用文档碎片管理,否则语句 sys.example.offset() 将返回 `{ top:0, left:0 }`。关于文档碎片的更多内容请参考 [使用文档碎片](/docs#优化_使用文档碎片)。
## position
```js
position()
```
- `Returns` : `PlainObject` 组件对象相对于父元素的位置(偏移)
该函数返回组件对象相对于父元素的位置(偏移)。返回的对象包含两个整型属性:top 和 left,以像素计。此函数仅对可见元素有效。
```js
// 03-15
Example: {
xml: "<div id='example'>\
<p id='text'>hello,world</p>\
</div>",
map: { nofragment: true },
fun: function (sys, items, opts) {
var p = sys.text.position();
console.log(p.left, p.top); // 8 0
}
}
```
## scrollTop
```js
scrollTop()
```
- `Returns` : `Number` 垂直偏移值
该函数用于返回组件对象的滚动条的垂直位置。此位置指的是滚动条相对于其顶部的偏移。
```js
scrollTop(offset)
```
- `Returns` : `SystemObject` 函数的调用者
该函数用于设置组件对象的滚动条的垂直位置。offset 指的是滚动条相对于其顶部的偏移。
```js
// 03-16
Example: {
css: "#doc { border:1px solid black; width:200px; height:200px; overflow:auto; }",
xml: "<div id='example'>\
<div id='doc'>\
This is some text. This is some text. This is some text. This is some text. \
This is some text. This is some text. This is some text. This is some text. \
This is some text. This is some text. This is some text. This is some text. \
This is some text. This is some text. This is some text. This is some text. \
</div>\
<button id='getting'>get scrollbar top offset</button>\
<button id='setting'>set scrollbar top offset to 30px</button>\
</div>",
fun: function (sys, items, opts) {
sys.getting.on("click", function() {
console.log(sys.doc.scrollTop());
});
sys.setting.on("click", function () {
sys.doc.scrollTop(30);
});
}
}
```
## scrollLeft
```js
scrollLeft()
```
- `Returns` : `Number` 水平偏移值
该函数用于返回组件对象的滚动条的水平位置。此位置指的是滚动条相对于其左侧边的偏移。
```js
scrollLeft(offset)
```
- `Returns` : `SystemObject` 函数的调用者
该函数用于设置组件对象的滚动条的水平位置。offset 指的是滚动条相对于其左侧边的偏移。
```js
// 03-17
Example: {
css: "#doc { border:1px solid black; width:100px; height:130px; overflow:auto }",
xml: "<div id='example'>\
<div id='doc'>\
The longest word in the english dictionary is: pneumonoultramicroscopicsilicovolcanoconiosis. \
</div>\
<button id='getting'>get scrollbar left offset</button>\
<button id='setting'>set scrollbar left offset to 30px</button>\
</div>",
fun: function (sys, items, opts) {
sys.getting.on("click", function () {
console.log(sys.doc.scrollLeft());
});
sys.setting.on("click", function () {
sys.doc.scrollLeft(30);
});
}
}
```