GVKun编程网logo

javascript – 使用intro.js突出显示一个新的dom元素(js显示内容)

14

在这篇文章中,我们将为您详细介绍javascript–使用intro.js突出显示一个新的dom元素的内容,并且讨论关于js显示内容的相关问题。此外,我们还会涉及一些关于JavascriptDom元素

在这篇文章中,我们将为您详细介绍javascript – 使用intro.js突出显示一个新的dom元素的内容,并且讨论关于js显示内容的相关问题。此外,我们还会涉及一些关于Javascript Dom元素、javascript – DOM元素太多、javascript – jquery以编程方式单击新的dom元素、javascript – jstree:创建一个新的子节点的知识,以帮助您更全面地了解这个主题。

本文目录一览:

javascript – 使用intro.js突出显示一个新的dom元素(js显示内容)

javascript – 使用intro.js突出显示一个新的dom元素(js显示内容)

我正在使用intro.js作为我的网络应用程序的“游览”.由于我正在尝试将其作为一个非常用户互动的游览,我允许用户在各个步骤上与突出显示的DOM元素进行交互.

我的应用程序中有一个包含行和列的表.右键单击一行会显示一个小的“选项”div,用户可以从中选择在当前行的上方/下方添加新行.当我开始巡演时,我会突出显示第一行.由于我正在进行互动游览,因此我允许用户添加新行.我的问题是 – 如何在同一步骤中突出显示新添加的行以及所选行?一系列步骤应该是这样的: –

第1步:(突出显示)

第2步: – 突出显示一行.如果用户添加新行(通过右键单击当前行并选择“在上方/下方添加行”),也要突出显示新行.

第3步: – (突出显示)

解决方法

这是一个有效的演示: http://jsfiddle.net/951ym964/2/

添加行时,必须调用introJs().refresh().

此外,您必须使用tbody来包装要突出显示的行.

Javascript Dom元素

Javascript Dom元素

1.Dom元素的获取

document.getElementById():通过id获取一个Dom元素
document.getElementsByClassName():通过class名字获取一个或多个Dom元素(伪数组)
document.getElementsByTagName():通过标签名字获取一个或多个Dom元素(伪数组)
document.querySelector():获取指定 CSS 选择器的一个元素
document.querySelectorAll():获取指定 CSS 选择器的多个元素(伪数组)

document.getElementsByTagName()和document.getElementsByClassName()获取到的都是动态列表

document.querySelectorAll()获取到的是静态列表,Dom结构发生变化要重新获取,不然会出问题

@H_301_16@<!DOCTYPE html> <html> <head> <Meta charset="UTF-8"> <title>Test</title> </head> <style> *{padding: 0;margin: 0;} </style> <body> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> </body> </html> <script> // 静态列表 var liNodes = document.querySelectorAll('li') console.log(liNodes.length) // 4 // 动态添加li标签 document.querySelector('ul').innerHTML += "<li>5</li>" console.log(liNodes.length) // 4 </script>

2.Dom元素节点类型

Dom节点类型分3类:元素节点,属性节点,文本节点
每种节点都有3种属性 nodeName,nodeType,nodeValue

@H_301_16@<!DOCTYPE html> <html> <head> <Meta charset="UTF-8"> <title>Test</title> </head> <style> *{padding: 0;margin: 0;} </style> <body> <div id="Box" title="我在哪">我是谁</div> </body> </html> <script> // 获取元素节点 var Box = document.querySelector('#Box') // 元素节点的属性 console.log(Box.nodeName);//DIV console.log(Box.nodeType); //1 console.log(Box.nodeValue); //一律为null // 根据属性名获取单个属性节点 var attrTitle = Box.getAttributeNode("title") // 属性节点的属性 console.log(attrTitle.nodeName);//title console.log(attrTitle.nodeType); //2 console.log(attrTitle.nodeValue); //"我在哪" // 获取Box的文本节点(没有专门的方法用来获取文本节点,但是这个div的第一个子节点就是文本节点) var textNode = Box.childNodes[0]; // 文本节点的属性 console.log(textNode.nodeName);//#text console.log(textNode.nodeType); //3 console.log(textNode.nodeValue); //"我是谁" </script>

3.获取Dom元素的子元素,父元素,兄弟元素

  • 通过children属性可以获取当前Dom元素的子元素
@H_301_16@<!DOCTYPE html> <html> <head> <Meta charset="UTF-8"> <title>Test</title> </head> <style> *{padding: 0;margin: 0;} </style> <body> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> </body> </html> <script> // 获取ul元素 var ul = document.querySelector('ul') // 获取ul子元素 var ul_children = ul.children // 遍历子元素 for(var i=0;i<ul_children.length;i++){ console.log(ul_children[i].innerHTML) // 1 // 2 // 3 } </script>
  • 获取当前元素的父元素
    parentElement/parentNode这两个属性都可以
@H_301_16@<!DOCTYPE html> <html> <head> <Meta charset="UTF-8"> <title>Test</title> </head> <style> *{padding: 0;margin: 0;} </style> <body> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> </body> </html> <script> // 获取ul元素 var ul = document.querySelector('ul') // 获取父元素(ul的父级就是body) var parent = ul.parentElement var parentNode = ul.parentNode console.log(parent.nodeName) // BODY console.log(parentNode.nodeName) // BODY </script>
  • 获取当前元素的兄弟元素
    prevIoUsElementSbiling属性:上一个兄弟元素
    nextElementSbiling属性:下一个兄弟元素
@H_301_16@<!DOCTYPE html> <html> <head> <Meta charset="UTF-8"> <title>Test</title> </head> <style> *{padding: 0;margin: 0;} </style> <body> <ul> <li>1</li> <li id="test">2</li> <li>3</li> </ul> </body> </html> <script> // 获取id为test的li元素 var li = document.querySelector('#test') // 获取兄弟元素 var prebrother = li.prevIoUsElementSibling var nextbrother = li.nextElementSibling console.log(prebrother.innerHTML) // 1 console.log(nextbrother.innerHTML) // 3 </script>

注意:
children与childNodes,前者只包含元素节点,而后者为元素节点+文本节点(回车换行也算是文本节点)
而prevIoUsElementSibling与prevIoUsSibling,nextElementSibling与nextSibling也一个道理
firstChild和lastChild:firstChild等价于childNodes[0],lastChild相当于childNodes的最后一个元素

4.DOM元素的添加与移除

  • 添加子元素
    appendChild():将目标元素作为子元素添加到当前元素的最后面
    insertBefore():将目标元素作为子元素添加到当前元素中,位置可以自由选择
@H_301_16@<!DOCTYPE html> <html> <head> <Meta charset="UTF-8"> <title>Test</title> </head> <style> *{padding: 0;margin: 0;} </style> <body> <ul> <li>1</li> <li id="test">2</li> <li>3</li> </ul> </body> </html> <script> // 获取id为test的li元素 var ul = document.querySelector('ul') // 创建li元素 var liNode = document.createElement('li') liNode.innerHTML = "4" // 将创建的li元素添加到ul中(最后面) ul.appendChild(liNode) // 再创建li元素 var liNode2 = document.createElement('li') liNode2.innerHTML = "life" var li_test = document.querySelector('#test') // 将创建的li元素添加到ul中(li_test的前面) ul.insertBefore(liNode2,li_test) </script>

运行结果

@H_301_16@<ul> <li>1</li> <li>life</li> <li id="test">2</li> <li>3</li> <li>4</li> </ul>
  • 删除子元素和替换子元素
    removeChild():删除子元素
    replaceChild():替换子元素
    语法:parent.removeChild(child)
    语法:parent.removeChild(替换的元素,被替换的元素)
@H_301_16@<!DOCTYPE html> <html> <head> <Meta charset="UTF-8"> <title>Test</title> </head> <style> *{padding: 0;margin: 0;} </style> <body> <ul> <li>1</li> <li id="test">2</li> <li id="replace">3</li> </ul> </body> </html> <script> // 获取id为test的li元素 var ul = document.querySelector('ul') // 获取要删除的li元素 var li_test = document.querySelector('#test') // 删除子元素 ul.removeChild(li_test) // 获取要替换的li元素 var li_replace = document.querySelector('#replace') // 创建要替换的元素 var newLI = document.createElement('li') newLI.innerHTML = "replace li tag" // 替换元素 ul.replaceChild(newLI,li_replace) </script>

运行结果:

@H_301_16@<ul> <li>1</li> <li>replace li tag</li> </ul>

javascript – DOM元素太多

javascript – DOM元素太多

我正在构建一个单页webapp,它开始变得非常大.应用程序有几个组件,每个组件都经过精心设计.平均而言,该应用的DOM元素数量为1200.我的YSlow扫描警告我这太多了,我应该有不超过700个DOM元素.

我的标记通常非常严格和高效,我怀疑我能够修剪得多.我倾向于使用大量的DOM元素来使样式完全正确并跨浏览器工作.

如何大幅减少DOM元素的数量?
我是否必须按需加载更多内容(ajax)而不是全部加载页面?
大量DOM元素对性能有很大影响吗?

我很想听听人们对此的体验以及您可能拥有的任何解决方案……

最佳答案
如果你通过Javascript在页面上进行大量的DOM和/或CSS操作,那么dom元素的数量只会进入图片.扫描具有50,000个元素的页面中的ID总是比仅有500个页面的页面慢.更改大部分页面继承的CSS样式很可能导致比更简单的页面更多重绘/回流页面等…

减少元素数量的唯一方法是简化页面.

javascript – jquery以编程方式单击新的dom元素

javascript – jquery以编程方式单击新的dom元素

我试图在jquery中做一些棘手的事情(至少对我来说).我有一个绑定到名为add_course的函数的复选框,如下所示:

    function add_course(){
        var id = $(this).attr('id');
        if ($(this).is(':checked')){

            if($('#courseInput').val().search(id) < 0){
                $('#CourseSummary').append('<span id="cn'+id+'"><a href="#"id="'+id+'">X</a> '+$('#course'+id+' a').html()+'<br/></span>');
                $('#courseInput').val(function(index,value){
                    return value+ id +',1;';
                });
                addTotal($('#price'+id).text());
            }
            imageSync();
        }else{
            //This is where my question refers to. 
            $('a#'+id+'.courseDel').click();
        }
    }

当有人选中该复选框时,会在页面中添加包含一些数据和链接的范围.新链接连接到不同的功能

$('.courseDel').live('click', del_course); 

del_course做了很多东西,就像add_course一样.

正如您在add_course函数中看到的那样.我检查复选框是否已经过检查,只检查过是否存在.

这是del_course:

     function del_course(){
        var id = $(this).attr('id');
        $('#cn'+id).remove();
        $('#courseInput').val(function(index,value){
            return value.replace(id+',1;',"");
        });
        subtractTotal($('#price'+id).text());
        imageSync();
    }

我想让add_course函数的else部分触发del_course,以便在选中复选框时添加相应的链接.这不起作用.我可能过于复杂了.

这是复选框的html(其中一个示例):

<input type="checkBox"name="courseAdd" id="204"/>

这是当有人点击复选框时添加的链接的html:

<span id="cn204"><a href="#"id="204">X</a> Course Title<br/></span>

有人点击链接时效果很好,但是我如何以编程方式触发它?

解决方法:

由于您拥有所创建元素的ID,因此只需引用ID并使用trigger()方法:

$('#'+id).trigger('click');

此外,只是一个数字的ID不正确:

ID and NAME tokens must begin with a letter ([A-Za-z]) and may be
followed by any number of letters, digits ([0-9]), hyphens (“-“),
underscores (“_”), colons (“:”), and periods (“.”).

javascript – jstree:创建一个新的子节点

javascript – jstree:创建一个新的子节点

在发布之前我已经检查了stackoverflow上的其他问题.一个是这样的:

creating a new node in jstree

但不知何故,我无法让它发挥作用.

我正在通过ajax获取子节点的详细信息.单击某个节点时,它将触发ajax请求并获取子节点详细信息.我想将这些细节附加到jstree中的父(单击)节点.

这是jsfiddle演示(没有ajax):https://jsfiddle.net/8wyqd9om/

你能帮我解决这个问题吗?

HTML:

<div id='cat_tree'>
<ul>
<li id="1">First
    <ul>

      <li id="2">First</li>
      <li id="3">First</li>
    </ul>
</li>
<li id="4">First</li>
<li id="5">First</li>    
<li id="6">First</li>
</ul>
</div>

JS:

$(function () { 
    $('#cat_tree').jstree({"core": {
        "themes":{
        "icons":false
        }
    }}); 

    var data = [
        { "id" : "7", "parent" : "#4", "text" : "second" },
        { "id" : "8", "parent" : "#4", "text" : "second" },
    ];

    $('#click').click(function() {
        $('#cat_tree').jstree().create_node($('#4'), data, 'last', function(){
        alert("done");
        }, true);
    });
});

解决方法:

请检查以下代码

$(function() {

  var data = [{
    "id": "p1",
    "parent": "#",
    "text": "Parent-1"
  }, {
    "id": "p2",
    "parent": "#",
    "text": "Parent-2"
  }, {
    "id": "c1",
    "parent": "p2",
    "text": "Child 1"
  }, {
    "id": "c2",
    "parent": "p2",
    "text": "Child 2"
  }, ];


  $("#jstree").jstree({
    "core": {
      "check_callback": true,
      "data": data
    }
  }).on('create_node.jstree', function(e, data) {
    console.log('saved');
  });

  $('#btnCreate').click(function() {

    $('#jstree').jstree().create_node('#', {
      "id": "p3",
      "text": "Parent-3"
    }, "last", function() {
      alert("Parent created");
    });

    $('#jstree').jstree().create_node('p2', {
      "id": "c3",
      "text": "Child 3"
    }, "last", function() {
      alert("Child created");
    });

  });

});

演示:https://jsfiddle.net/m24fvh39/1/

我们今天的关于javascript – 使用intro.js突出显示一个新的dom元素js显示内容的分享就到这里,谢谢您的阅读,如果想了解更多关于Javascript Dom元素、javascript – DOM元素太多、javascript – jquery以编程方式单击新的dom元素、javascript – jstree:创建一个新的子节点的相关信息,可以在本站进行搜索。

本文标签: