js链式调用的疑惑

今天封装了关于jq的siblings的函数,想再封装一个关于removeClass的函数并实现链式调用,类似于document.getElementById().siblings().removeClass()这样的链式调用方式。尝试了多次均不成功,可能是思路不对,请多指点怎样实现用js封装jq的api并实现链式调用,不胜感激。提供思路也可!

Element.prototype.siblings=function siblings(){
            var siblingsElement=[];
            var parentAllElement=[];
            if(! this.parentNode){
                return siblingsElement;
            };
            parentAllElement=this.parentNode.getElementsByTagName(this.tagName)
            for(var i=0,len=parentAllElement.length;i<len;i++){
                if(parentAllElement[i]!=this)
                siblingsElement.push(parentAllElement[i]);

            }
            return siblingsElement;
        }
var hasClass=function(element,oClass){
    return element.className.match(new RegExp('(^|\\s)' + oClass + '(\\s|$)'));
    }

var removeClass=function(element,oClass){
    var cls=new RegExp('(^|\\s)' + oClass + '(\\s|$)');
    if(hasClass(element,oClass)){
        element.className=element.className.replace(cls,'')}
}
阅读 2.3k
2 个回答

想要链式调用 return 必须是有后续调用方法的对象
你siblings方法最后return的是一个内部的数组 他的原型上没有对应的方法 所以不成功

Element.prototype.removeClass=function(oClass){
    var cls=new RegExp('(^|\\s)' + oClass + '(\\s|$)');
    for(var i = 0; i < this.length; i++ ) {
        if(hasClass(this[i],oClass)){
        element.className=this[i].className.replace(cls,'')}
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题