基本的结点操作

结点操作主要是指挂载在clay对象上的方法集合,是clay.js的基础API,如果你选择浏览器绘图而不是node.js的话。

创建clay对象

clay对象是指维护了一些结点集合,并挂载了一些快捷方法来操作维护的结点的一个js对象,其中的快捷方法可以帮助你在屏蔽不同浏览器和不同结点类型的差异的情况下操作结点。

// 获取clay对象
var clayObject=$$(selector[,context]);

$$或clay是一个挂载在window或global全局对象上的方法,传递一个选择器就可以获得一个clay对象,其中selector表示一个类似css选择器的字符串。

第二个参数context是可选的,默认在全局查找,你也可以通过传递一个dom结点指定查找上下文(id选择器一定在全局查找),记住,不可以传递clay对象。

selector选择器

需要注意的是,tagName元素选择器如果使用,必须在开头,且只可以使用一个;属性选择器可以不指定值;模板选择器必须有一个大的标签包裹全部。下面看看几个例子:

$$('[name="data"]line')、$$('<line></line><line></line>')
$$('line[name="data"]')、$$('[name]')、$$('<g><line></line><line></line></g>')

至此,我们就知道如何创建一个clay对象了,余下的就是使用其上的快捷方法,这是非常容易的。

查找结点

虽然创建clay对象的时候可以传递一个选择器查找结点,但是在实际开发中,有时需要在此基础上继续查找。

var newClayObject=clayObject.find(selector);

这会把当前维护的第一个结点作为上下文查找,返回新的clay对象。

var newClayObject=clayObject.eq(0);

返回一个新的clay对象,其中只维护了原对象维护的第一个结点。有时候,你可能会需要获取某个维护的结点(不是clay对象),比如你想获取维护的第8个结点:

var dom=clayObject[7];

上面的方法可能会出现错误,如果clayObject维护的结点个数少于8个的话,你可以通过下面的方法获取对象维护的结点个数:

var domNum=clayObject.length;

还有一种情况,比如你之前查找了页面上全部的line标签,此刻页面line标签有了一些改变,你可以通过下面的方法更新一下维护的结点:

clayObject.refresh();

结点编辑

结点的编辑主要包括三类:结点自身、结点属性和样式。

结点自身

删除clay对象维护的全部结点:

clayObject.remove();

把当前维护的全部结点追加到指定结点内部:

clayObject.appendTo(selector);

结点属性

clayObject.attr(attr[, val]);

之前应该在教程系列中的数据和结点操作一节中有看过这个方法,该方法是和数据与结点绑定有关系的方法,在设置属性的时候可以使用结点记录的数据来计算。

var name=clayObject.attr('name');

如果该方法只传递一个参数,表示获取该属性的值,比如上面获取name属性的值。

clayObject.attr('name','新的name值');

如果第二个参数是一个字符串,比如这里,表示设置name属性的值为'新的name值'。

clayObject.attr('name',function(data, index, target){
        //里面需要返回一个值,表示为name属性设置的新值
});

上面这种方法就是沟通数据和结点的关键用法之一,其中data表示结点绑定的数据,index表示结点序号,target表示当前结点。

样式css

clayObject.css(key[, style]);

css方法有一部分和attr是一样的,下面是使用模板:

// 获取样式值
var val=clayObject.css('key');

//设置样式值
clayObject.css('key', 'value');

// 通过json设置样式值
clayObject.css({
    "key":"value",
    ...
});

因为考虑到样式,比如色彩,可能需要根据数据的大小来改变,因此也提供了类似attr的方法:

clayObject.css('key',function(data, index){
    //里面需要返回一个值,表示为key属性设置的新值
});

因为设置样式值的时候,第一个参数可能是json,此时为了和数据联系起来,你应该这样设置:

clayObject.css({
    "key":"value",
    ...
},function(data, index, key, value){
    //里面需要返回一个值,表示为key属性设置的新值
});

上面的形参key和value分别表示设置的样式和对应的值,因为json设置方式设置的样式很多,计算的时候需要知道此刻面对的是哪个属性。