<body>
<div class = "aa" role = "aa">1</div>
<div class = "aaa" role = "aaa">2</div>
<div class = "aaaa" role = "abc">3</div>
<div class = "aa" role = "abc">4</div>
<div class = "aaa" role = "bbb">5</div>
<div class = "aaaa" role = "cba">6</div>
</body>
<script>
function get(ele,className,role){
var allEle = document.getElementsByTagName(ele),
eleClass = "",
eleRole = "",
reg = null;
for(var i=0,len = allEle.length;i<len;i++){
eleClass = allEle[i].className;
eleRole = allEle[i].getAttribute("role");
reg = new RegExp("(^\s*|\s+)"+className+"($\s*|\s+)")
if(reg.test(eleClass) && eleRole == role){
return allEle[i];
}
}
return null;
}
console.log(get("div","aaa","bbb").innerHTML);像这样取试试,如果能找到对应的,就会返回对应的dom元素,如果找不到就会返回null所以得到返回值,使用的时候,要先判断是不是找到了对应的dom元素。之后,就按照设置属性的样式设置就行。
三个参数:标签名,className,role的值。看你给的标签样式写的。其实这些东西,还是根据id进行判断最好,就算是id有所区别,但是id的值,肯定也是有一定的规则的,其中有一部分肯定是不会变化的。我做下列的假设,假设id中,只有数字是变化的,那么可以直接使用正则表达式进行判断。
var str1 = "cke_88_contents";
var str2 = "cke_388_contents";
var str3 = "cke_1288_contents";
reg = /^cke\_[\d]+\_contents$/;
console.log(reg.test(str1));
console.log(reg.test(str2));
console.log(reg.test(str3));这样进行判断,比上面的判断方法,应该会更精确。如果id就是以这个规则变化,那就把上面的函数改一下,不要class和role了,只要一个id就行了。试试看!
<div class = "aa" role = "aa">1</div>
<div class = "aaa" role = "aaa">2</div>
<div class = "aaaa" role = "abc">3</div>
<div class = "aa" role = "abc">4</div>
<div class = "aaa" role = "bbb">5</div>
<div class = "aaaa" role = "cba">6</div>
</body>
<script>
function get(ele,className,role){
var allEle = document.getElementsByTagName(ele),
eleClass = "",
eleRole = "",
reg = null;
for(var i=0,len = allEle.length;i<len;i++){
eleClass = allEle[i].className;
eleRole = allEle[i].getAttribute("role");
reg = new RegExp("(^\s*|\s+)"+className+"($\s*|\s+)")
if(reg.test(eleClass) && eleRole == role){
return allEle[i];
}
}
return null;
}
console.log(get("div","aaa","bbb").innerHTML);像这样取试试,如果能找到对应的,就会返回对应的dom元素,如果找不到就会返回null所以得到返回值,使用的时候,要先判断是不是找到了对应的dom元素。之后,就按照设置属性的样式设置就行。
三个参数:标签名,className,role的值。看你给的标签样式写的。其实这些东西,还是根据id进行判断最好,就算是id有所区别,但是id的值,肯定也是有一定的规则的,其中有一部分肯定是不会变化的。我做下列的假设,假设id中,只有数字是变化的,那么可以直接使用正则表达式进行判断。
var str1 = "cke_88_contents";
var str2 = "cke_388_contents";
var str3 = "cke_1288_contents";
reg = /^cke\_[\d]+\_contents$/;
console.log(reg.test(str1));
console.log(reg.test(str2));
console.log(reg.test(str3));这样进行判断,比上面的判断方法,应该会更精确。如果id就是以这个规则变化,那就把上面的函数改一下,不要class和role了,只要一个id就行了。试试看!
var allEle = document.getElementsByTagName(ele),
reg = /^cke\_[\d]+\_contents$/;
for(var i=0,len = allEle.length;i<len;i++){
eleId = allEle[i].id;
if(reg.test(eleId)){
return allEle[i];
}
}
return null;
}上面说错了,入过是按照id的话,只要传入一个标签名就行了。
返回值,和上面说的一样。
PS:刚才用IE11测试了下,似乎高度会变化,工具栏收缩时,编辑区变自动变大,但高度还是没符合要求,而chrome浏览器,则完全没变大,看来,这个应该是bug的了。
看了下,展开收获的HTML代码是:<a title="展开工具栏" id="cke_1_toolbar_collapser" tabindex="-1" class="cke_toolbox_collapser cke_toolbox_collapser_min" onclick="CKEDITOR.tools.callFunction(210)"><span class="cke_arrow">◀</span></a>很明显,那要在:CKEDITOR.tools.callFunction(210)这个函数里边改变编辑区高度啊,那不去源码里边代,那怎么改?把事件绑定到a标签上去?具体怎么绑呢?水平有限,请继续指点,多谢
var allEle = document.getElementsByTagName(ele),
reg = /^cke\_[\d]+\_contents$/;
for(var i=0,len = allEle.length;i<len;i++){
eleId = allEle[i].id;
if(reg.test(eleId)){
return allEle[i];
}
}
return null;
}
function changeHeight(value){
var ele = get("div");
if(ele!==null){
ele.style.height = value+"px";
}
}
再添加一个更改高度的函数,既然是直接绑定在标签中的,那就更好绑定了。
直接在标签的onclick中,原来的函数之后,在放一个就行了。
比如:
onclick="CKEDITOR.tools.callFunction(210);changeHeight(500);"changeHeight传入的值,就是要变成的高度。
这个就得注意一下,在点击展开,和点击收缩时,都这么调用,只是传入的值,要不同才行。你自己试试传入多大的值,适合就改成多大即可。不过,这样估计在之前支持高度变化的浏览器上面,高度就会变化两次,你试试呗。
onclick="CKEDITOR.tools.callFunction(210);changeHeight(500);"
把两个函数绑定到a上,貌似不可行啊
我的作法是:
先求到a对象,然后这样绑定:
a.onclick = function(){
CKEDITOR.tools.callFunction(210);
changeHeight(500);
}
这样做貌似可行啊,但实际上,折叠变没效果了呢。
也就是说,只有重新绑定onclick,去点击这个折叠工具栏,点击就没反应了,不知道问题出在那里呢?
我就算这样写也没效果:
a.onclick = function(){
CKEDITOR.tools.callFunction(210);
//changeHeight(500);
}
看来直接这样绑定单击事件不可靠啊,有影响
最通用的,最简单,最不用担心兼容问题的写法了。一般不用考虑这个方法带来的问题,如果有问题,就肯定是某一个函数内部的问题了。试试看。
就算这样子也不行:
a.onclick = CKEDITOR.tools.callFunction(210);
打算换思路了,不用它这个函数CKEDITOR.tools.callFunction(210);
而去找到具体的折叠/展开方法代码,估计只能这样做了吧,但这个要去研究源码看怎么实现了,麻烦了,不好弄啊。
a.onclick = "CKEDITOR.tools.callFunction(210);changeHeight(500);";
也没效果,并且好像没有这样子写的吧,值应该是函数才行。把CKEDITOR.tools.callFunction(210)写到
changeHeight(500)中去,也没效果,试了。
CKEDITOR.tools.callFunction(222,event);这个样式的,为啥后面贴代码的时候,就没有第二个参数了呢?第二个参数是必须要传入的。而且只能写成event。
,困了,休息去了,改天再好好研究了,还是很感谢你认真指点啊,学了不少
a.onclick = function(){
CKEDITOR.tools.callFunction(210);
changeHeight(500);
}
原来是自己测试时,大意,将210改为了其它数据,200,
a.onclick = function(){
CKEDITOR.tools.callFunction(200);//200是不行的,准确说非210的值都不行的,都会造成点击工具栏无效,很奇怪的一个函数,原来,工具栏收缩,必须要有210这个值才行,大意了。
changeHeight(500);
}
好了,结了,感谢各位参与。