2 xy xiaomo xy_xiaomo 于 2014.12.03 17:17 提问

js有什么方法代替cloneNode的写法么?

/**
* 鼠标事件:处理下拉框内容显示不全(在遮罩div中无法正常显示效果)
* @param selectObj
/
function FixWidth(selectObj) {
var newSelectObj = document.createElement("select");
*
_newSelectObj = selectObj.cloneNode(true);_**
newSelectObj.selectedIndex = selectObj.selectedIndex;
newSelectObj.id = "newSelectObj";

    var e = selectObj;
    var absTop = e.offsetTop;
    var absLeft = e.offsetLeft;
    while (e = e.offsetParent) {
        absTop += e.offsetTop;
        absLeft += e.offsetLeft;
    }
    with (newSelectObj.style) {
        position = "absolute";
        top = absTop + "px";
        left = absLeft + "px";
        width = "auto";
    }

    var rollback = function() {
        RollbackWidth(selectObj, newSelectObj);
    };
    if (window.addEventListener) {
        newSelectObj.addEventListener("blur", rollback, false);
        newSelectObj.addEventListener("change", rollback, false);
    } else {
        newSelectObj.attachEvent("onblur", rollback);
        newSelectObj.attachEvent("onchange", rollback);
    }

    selectObj.style.visibility = "hidden";
    document.body.appendChild(newSelectObj);

    var newDiv = document.createElement("div");
    with (newDiv.style) {
        position = "absolute";
        top = (absTop - 10) + "px";
        left = (absLeft - 10) + "px";
        width = newSelectObj.offsetWidth + 20;
        height = newSelectObj.offsetHeight + 20;
        background = "transparent";
    }
    document.body.appendChild(newDiv);
    newSelectObj.focus();
    var enterSel = "false";
    var enter = function() {
        enterSel = enterSelect();
    };
    newSelectObj.onmouseover = enter;

    var leavDiv = "false";
    var leave = function() {
        leavDiv = leaveNewDiv(selectObj, newSelectObj, newDiv, enterSel);
    };
    newDiv.onmouseleave = leave;
}

function RollbackWidth(selectObj, newSelectObj) {
    selectObj.selectedIndex = newSelectObj.selectedIndex;
    selectObj.style.visibility = "visible";
    if (document.getElementById("newSelectObj") != null) {
        document.body.removeChild(newSelectObj);
    }
}

function removeNewDiv(newDiv) {
    document.body.removeChild(newDiv);
}

function enterSelect() {
    return "true";
}

function leaveNewDiv(selectObj, newSelectObj, newDiv, enterSel) {
    if (enterSel == "true") {
        RollbackWidth(selectObj, newSelectObj);
        removeNewDiv(newDiv);
    }
}

1个回答

lzp_lrp
lzp_lrp   Ds   Rxr 2015.01.09 08:41

在js里cloneNode可以直接使用,为什么要替代它呢?

cloneNode方法是克隆节点用的,自己写代码也可以实现

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
使用cloneNode时需要注意的问题
cloneNode()是DOM中Node对象的方法,使用cloneNode可以方便的复制DOM节点。cloneNode()接收一个参数include_all。include_all为一个布尔值,true表示被clone的节点的所有子节点也会被clone(既深度clone),false(默认)只会clone原节点。 1.当被clone的节点包含script标签时,clone后script标签是
js中cloneNode()的使用 两个例子
cloneNode() 方法可创建指定的节点的精确拷贝。 (可以做一个模版 然后做一个隐藏域,点击按钮就添加一个模板!) 此方法可返回所复制的节点。 该方法将复制并返回调用它的节点的副本。如果传递给它的参数是 true,它还将递归复制当前节点的所有子孙节点。否则,它只复制当前节点。 返回的节点不属于文档树,它的 parentNode 属性为 null。 当复制的
js dom 方法 js中cloneNode()的使用(复制元素)
js dom 方法 js中cloneNode()的使用(复制元素)   document方法:   getElementById(id)  Node  返回指定结点的引用   getElementsByTagName(name)  NodeList  返回文档中所有匹配的元素的集合   createElement(name)  Node  Node   creat
js中cloneNode()的使用
在web页面中经常需要出现许多完全一样的控件项,而需要控件的多少完全由用户输入量决定,在js中可以很容易的实现这点,效果展示大多时候比语言来得更有魅力。 http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> http://www.w3.org/1999/xhtml"> 控件cloneNode()方法的使用  i=1;
js eval替代方法学习笔记
写前端的小伙伴们都知道,js种eval()方法是用来把一段字符串转换成js代码并执行。但是eval的执行效率非常差,并且容易造成作用于混乱。所以非常不提倡使用eval,甚至要避免使用。 但是在某些情况下这个功能却是必不可少的。同在csdn上 有一篇 js替代eval方法,作者写的非常好。下面就拿代码来学习一下。 第一种方法: function evil(str) {
各浏览器cloneNode方法的部分实现差异
cloneNode来自于Node,用来复制一个相同的节点元素。它有一个布尔类型的参数,如果为true则其子节点也会被拷贝。但在不同浏览器中它的表现有些地方却不同。下面依次列出。   一、IE6/7中radio和checkbox的checked和其它浏览器不同 1 2 3 4 5 6 7     var input = document.g
js中cloneNode()的使用
在web页面中经常需要出现许多完全一样的控件项,而需要控件的多少完全由用户输入量决定,在js中可以很容易的实现这点,效果展示大多时候比语言来得更有魅力。 DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
eval()的替代写法
eval()写法 var items = eval(node.original.param); 替代写法 var json = node.original.param; var items = (new Function("","return"+json))();
js中替换window.onload的方法 document.ready
通常我们想要在页面内容加载完成后运行 JS 时,都会使用 window.onload 来处理,比如:          window.onload = function () {                alert('Hello World!');         }        这段代码将在页面载入完成后弹出一个 "Hello World!" 的警告框,但
有关过多if-else代码的优雅解决方式(搭配注解替代枚举的方法)
前言很久没写博客了,最近一段时间一直在封装一个即时通讯的SDK库,接手前一位同事写的代码,然后需要对核心层的逻辑业务进行封装,因为我们的即时通讯项目是用的socket.io协议,所以得将socket.io模块以及数据库等进行封装,暴露一些接口供我们的App调用。从代码中我看出来他尽力了。。。但是我看的依然很费劲。哈哈,没办法,接手一个代码肯定是很费精力的。。。所以真是很久没时间写了。 之所以废话这么