document.createElement()的用法

      分析代码时,发现自己的盲点——document.createElement(),冲浪一番,总结了点经验。

 

      document.createElement()是在对象中创建一个对象,要与appendChild() 或 insertBefore()方法联合使用。其中,appendChild() 方法在节点的子节点列表末添加新的子节点。insertBefore() 方法在节点的子节点列表任意位置插入新的节点。

 

      下面,举例说明document.createElement()的用法。<div id="board"></div>

例1:

        <script type="text/javascript">
            var board = document.getElementById("board");
            var e = document.createElement("input");
            e.type = "button";
            e.value = "这是测试加载的小例子";
            var object = board.appendChild(e);
        </script>

效果:在标签board中加载一个按钮,属性值为“这是测试加载的小例子”。 

       

例2:

        <script type="text/javascript">
            var board = document.getElementById("board");
            var e2 = document.createElement("select");
            e2.options[0] = new Option("加载项1", "");
            e2.options[1] = new Option("加载项2", "");
            e2.size = "2";
            var object = board.appendChild(e2);
        </script>

效果:在标签board中加载一个下拉列表框,属性值为“加载项1”和“加载项2”。 

        

例3:

        <script type="text/javascript">
            var board = document.getElementById("board");           
            var e3 = document.createElement("input");
            e4.setAttribute("type", "text");
            e4.setAttribute("name", "q");
            e4.setAttribute("value", "使用setAttribute");
            e4.setAttribute("onclick", "javascript:alert('This is a test!');");           
            var object = board.appendChild(e3);
        </script>

效果:在标签board中加载一个文本框,属性值为“使用setAttribute”。 当点击这个文本框时,会弹出对话框“This is a test!”。

 

        根据上面例子,可以看出,可以通过加载对象的属性来设置,参数是相同的。使用e.type="text" 和 e.setAttribute("type","text")效果是一致的。

       

        下面,我们用实例来讲述一下appendChild() 方法和insertBefore() 方法的不同

        比如我们要在下面这个div中插入一个子节点P时:<div id="test"><p id="x1">Node</p><p>Node</p></div>

我们可以这样写:

<script type="text/javascript">
  var oTest = document.getElementById("test");
  var newNode = document.createElement("p");
  newNode.innerHTML = "This is a test";
  //测试从这里开始
  //appendChild方法:
  oTest.appendChild(newNode);
  //insertBefore方法:
  oTest.insertBefore(newNode,null);
</script>

      通过以上的代码,可以测试到一个新的节点被创建到了节点div下,且该节点是div最后一个节点。很明显,通过这个例子,可以知道appendChildhild和insertBefore都可以进行插入节点的操作。

   在上面的例子中有这样一句代码:oTest.insertBefore(newNode,null) ,这里insertBefore有2个参数可以设置,第一个是和appendChild相同的,第二却是它特有的。它不仅可以为null,还可以为:

<script type="text/javascript">
  var oTest = document.getElementById("test");
  var refChild = document.getElementById("x1");
  var newNode = document.createElement("p");
  newNode.innerHTML = "This is a test";
  oTest.insertBefore(newNode,refChild);
</script>

效果:这个例子将在x1节点前面插入一个新的节点

 

又或:

<script type="text/javascript">
  var oTest = document.getElementById("test");
  var refChild = document.getElementById("x1");
  var newNode = document.createElement("p");
  newNode.innerHTML = "This is a test";
  oTest.insertBefore(newNode,refChild.nextSibling);
</script>

效果:这个例子将在x1节点的下一个节点前面插入一个新的节点

 

还可为:

<script type="text/javascript">
  var oTest = document.getElementById("test");
  var newNode = document.createElement("p");
  newNode.innerHTML = "This is a test";
  oTest.insertBefore(newNode,oTest.childNodes[0]);  
</script>

  这个例子将在第一子节点前面插入一个新的节点,也可以通过改变childNodes[0,1,...]来在其它位置插入新的节点

由于可见insertBefore()方法的特性是在已有的子节点前面插入新的节点,但例一中使用insertBefore()方法也可以在子节点列表末插入新节点的。两种情况结合起来,发现insertBefore()方法插入节点,是可以在子节点列表的任意位置。

  从这几个例子中得出:

  appendChild() 方法在节点的子节点列表末添加新的子节点。

  insertBefore() 方法在节点的子节点列表任意位置插入新的节点。


//创建img对象
            var newspan = document.createElement("img");//创建img对象
//设置img对象css样式
            newspan.style.position = "absolute";
            newspan.style.right=0;
            newspan.cssFloat='right';
             newspan.style.right=0;
            newspan.style.top="31px";
            newspan.style.cursor="pointer";
            newspan.src = 'http://lvyou.elong.com/static/swfupload/images/detele.gif';
//设置img对象onclick 
            newspan.onclick = function() {
                if (confirm('确认要删除图片吗'))
                {
                    //既删除数据又删除div
                    var pflag = this.parentNode;
                    var url2 = "xxx?action=delete&from_ajax=1&pid=" + this.parentNode.id;


                    var req = (window.XMLHttpRequest) ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : false);
                    if (!req) exit;
                    var method = "GET";
                    req.open(method,url2,true);
                    req.onreadystatechange = function () {
                        if (req.readyState == 4) {
                            if(req.status == 200) {
                                    //既删除数据又删除div
                                    //alert(req.responseText);
                                    if (req.responseText)
                                    {
                                        pflag.parentNode.removeChild(pflag);
                                    }
                                    else
                                    {
                                        alert("图片删除失败");
                                    }
                                }else{
                                alert("There was a problem with the request " + req.status);
                            }
                        }
                    }
                    req.send(url2);


                }
            }
//接入dom
            document.getElementById(pid).appendChild(newspan);


范例2:
//创建TEXTAREA对象
                var newTextElement = document.createElement("textarea");
                newTextElement.name = pid+"[description]";
                newTextElement.rows = 5;
                newTextElement.cols = 20;
                document.getElementById(pid).appendChild(newTextElement);




范例3:
//创建input对象insertBefore实例
                var newElement = document.createElement("input");
                newElement.name = pid+"[title]";
                newElement.type= "text";
                newElement.size= 9;
                newElement.value= '标题';
                newElement.onclick = function() {
                  if (this.value=='标题') {
                        this.value='';
                    }
                }    
                document.getElementById(pid).insertBefore(newElement, document.getElementById(pid).childNodes[0]);


                var newElementDiv = document.createElement("div");
                newElementDiv.className = 'search-con';
                
                var newDidElement = document.createElement("input");
                newDidElement.name =  pid+"_dids[]";
                newDidElement.className= "_dests";
                newDidElement.type= "text";
                newDidElement.size= 9;
                ***newDidElement.setAttribute("rel",1); //如果直接赋值不能实现,使用setAttribute方法可以实现
                
                newElementDiv.appendChild(newDidElement);
                document.getElementById(pid).appendChild(newElementDiv);
                
                var newIdElement = document.createElement("input");
                newIdElement.type= "hidden";
                newIdElement.name =  pid+"[pid]";
                newIdElement.value = pid.substring(3);
                
                document.getElementById(pid).appendChild(newIdElement);


            }

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
function showPopup(src) { if (isPopupVisible) { return; // 如果悬浮窗已经显示,则直接返回 } isPopupVisible = true; // 标记悬浮窗为显示状态 var overlay = document.createElement("div"); overlay.style.position = "fixed"; overlay.style.top = "0"; overlay.style.left = "0"; overlay.style.width = "100%"; overlay.style.height = "100%"; overlay.style.backgroundColor = "rgba(0, 0, 0, 0.8)"; overlay.style.zIndex = "9998"; // 设置遮罩层的z-index低于悬浮窗,但高于其他元素 popup.parentNode.insertBefore(overlay, popup); var popup = document.createElement("div"); popup.style.position = "fixed"; popup.style.top = "50%"; popup.style.left = "50%"; popup.style.transform = "translate(-50%, -50%)"; popup.style.backgroundColor = "rgba(0, 0, 0, 0.8)"; popup.style.zIndex = "9999"; popup.style.width = "75%"; // 设置悬浮窗宽度为页面宽度的75% popup.style.height = "75%"; // 设置悬浮窗高度为页面高度的75% popup.style.overflow = "hidden"; // 使图片在悬浮窗居中 var imgContainer = document.createElement("div"); imgContainer.style.display = "flex"; imgContainer.style.justifyContent = "center"; imgContainer.style.alignItems = "center"; imgContainer.style.backgroundColor = "transparent"; imgContainer.style.width = "100%"; imgContainer.style.height = "100%"; var img = document.createElement("img"); img.src = src; img.alt = "放大照片"; img.style.maxWidth = "100vw"; img.style.maxHeight = "100vh"; var scale = 1; // 初始缩放比例 var scaleFactor = 0.1; // 每次滚动的缩放因子 // 鼠标滚轮事件 img.onwheel = function (e) { e.preventDefault(); // 阻止默认滚轮行为处理页面滚动 scale += e.deltaY > 0 ? -scaleFactor : scaleFactor; // 根据滚轮滚动方向确定缩放比例 scale = Math.max(scale, 0.1); // 最小缩放比例为0.1 img.style.transform = `scale(${scale})`; }; // 关闭悬浮窗 popup.onclick = function () { document.body.removeChild(popup); document.body.removeChild(overlay); isPopupVisible = false; // 标记悬浮窗为隐藏状态 }; imgContainer.appendChild(img); popup.appendChild(imgContainer); document.body.appendChild(popup); overlay.onclick = function () { document.body.removeChild(popup); document.body.removeChild(overlay); isPopupVisible = false; // 标记悬浮窗为隐藏状态 }; }当我修改后无法点击放大图片
07-17
在您的代码中,我注意到您将遮罩层的创建代码放在了`popup`元素之前,这可能导致遮罩层覆盖在悬浮窗的上方,从而导致无法点击放大图片。 为了解决这个问题,您需要调整代码的顺序。确保先创建悬浮窗元素`popup`,然后创建遮罩层元素`overlay`,并将遮罩层元素插入到悬浮窗元素之前。 请参考以下修改后的代码: ```javascript function showPopup(src) { if (isPopupVisible) { return; // 如果悬浮窗已经显示,则直接返回 } isPopupVisible = true; // 标记悬浮窗为显示状态 var popup = document.createElement("div"); popup.style.position = "fixed"; popup.style.top = "50%"; popup.style.left = "50%"; popup.style.transform = "translate(-50%, -50%)"; popup.style.backgroundColor = "rgba(0, 0, 0, 0.8)"; popup.style.zIndex = "9999"; popup.style.width = "75%"; // 设置悬浮窗宽度为页面宽度的75% popup.style.height = "75%"; // 设置悬浮窗高度为页面高度的75% popup.style.overflow = "hidden"; var overlay = document.createElement("div"); overlay.style.position = "fixed"; overlay.style.top = "0"; overlay.style.left = "0"; overlay.style.width = "100%"; overlay.style.height = "100%"; overlay.style.backgroundColor = "rgba(0, 0, 0, 0.8)"; overlay.style.zIndex = "9998"; // 设置遮罩层的z-index低于悬浮窗,但高于其他元素 popup.parentNode.insertBefore(overlay, popup); var imgContainer = document.createElement("div"); imgContainer.style.display = "flex"; imgContainer.style.justifyContent = "center"; imgContainer.style.alignItems = "center"; imgContainer.style.backgroundColor = "transparent"; imgContainer.style.width = "100%"; imgContainer.style.height = "100%"; var img = document.createElement("img"); img.src = src; img.alt = "放大照片"; img.style.maxWidth = "100vw"; img.style.maxHeight = "100vh"; var scale = 1; // 初始缩放比例 var scaleFactor = 0.1; // 每次滚动的缩放因子 // 鼠标滚轮事件 img.onwheel = function (e) { e.preventDefault(); // 阻止默认滚轮行为处理页面滚动 scale += e.deltaY > 0 ? -scaleFactor : scaleFactor; // 根据滚轮滚动方向确定缩放比例 scale = Math.max(scale, 0.1); // 最小缩放比例为0.1 img.style.transform = `scale(${scale})`; }; // 关闭悬浮窗 popup.onclick = function () { document.body.removeChild(popup); document.body.removeChild(overlay); isPopupVisible = false; // 标记悬浮窗为隐藏状态 }; imgContainer.appendChild(img); popup.appendChild(imgContainer); document.body.appendChild(overlay); document.body.appendChild(popup); } ``` 请尝试使用以上修改后的代码,并重新加载页面,看看是否能够点击放大图片。如果仍然遇到问题,请提供更多详细信息,以便我能够更好地帮助您解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值