GVKun编程网logo

尝试在树javascript中递归查找元素(js递归查找树形结构选中节点的id)

21

在本文中,您将会了解到关于尝试在树javascript中递归查找元素的新资讯,同时我们还将为您解释js递归查找树形结构选中节点的id的相关在本文中,我们将带你探索尝试在树javascript中递归查找

在本文中,您将会了解到关于尝试在树javascript中递归查找元素的新资讯,同时我们还将为您解释js递归查找树形结构选中节点的id的相关在本文中,我们将带你探索尝试在树javascript中递归查找元素的奥秘,分析js递归查找树形结构选中节点的id的特点,并给出一些关于JavaScript DOM基础:查找元素、JavaScript DOM:在容器中查找元素索引、javascript find方法查找元素、javascript – 按自定义数据属性值查找元素的实用技巧。

本文目录一览:

尝试在树javascript中递归查找元素(js递归查找树形结构选中节点的id)

尝试在树javascript中递归查找元素(js递归查找树形结构选中节点的id)

您的实施存在一些问题。

  1. 您的起点是一个数组,但您通过尝试使用其 children 属性将其视为一个节点。
  2. 您正在 name 上查找 children,但 children 是一个数组。
  3. 您在收到的末尾将相同的内容传递给 findName。如果你达到那个点,你会不断地给自己打电话,直到用完堆栈空间。

遍历数组中的节点,检查它们及其子节点;查看评论:

function findName(name,children) {
    if (Array.isArray(children)) {
        // Yes,check them
        for (const childNode of children) {
            if (childNode.name === name) {
                // Found it
                return childNode;
            }
            // Look in this node's children
            const found = findName(name,childNode.children);
            if (found) {
                // Found in this node's children
                return found;
            }
        }
    }
}

现场示例:

const tree = [
{
    "_id": "604cab0acbdb8c1060698419","name": "Grocery","children": [
        {
            "children": [
              {
                "name": "Fruits","price": "200"
                
              }
              ],"_id": "604cad9b4ae51310c6f313f6","name": "Potatoes","price": "200"
        },{
            "children": [],"_id": "604cae721257d510e679a467","name": "Vegetables"
        }
    ],"date": "2021-03-13T12:07:38.186Z","__v": 0
} ];


function findName(name,childNode.children);
            if (found) {
                // Found in this node's children
                return found;
            }
        }
    }
}

console.log(findName("Fruits",tree));

,

const object = [
    {
        "_id": "604cab0acbdb8c1060698419","children": [
            {
                "children": [
                  {
                    "name": "Fruits","price": "200"
                    
                  }
                  ],"price": "200"
            },{
                "children": [],"name": "Vegetables"
            }
        ],"__v": 0
    } ]
  
function find(name,tree) {
  // tree is undefined,return `undefined` (base case)
  if (!tree) return

  if (Array.isArray(tree)) {
    // tree is an array
    // so iterate over every object in the array
    for (let i = 0; i < tree.length; i++) {
      const obj = tree[i]
      const result = find(name,obj)
      // `find` returned non-undefined value
      // means match is found,return it
      if (result) return result
      // no match found in `obj` so continue
    }
  } else if (tree.name === name) {
    // `tree` is a key-value object
    // and has matching `name` 
    return tree
  }

  // if no tree matching `name` found on the current `tree`
  // try finding on its `children`
  return find(name,tree.children)
}

console.log(find("Fruits",object))

JavaScript DOM基础:查找元素

JavaScript DOM基础:查找元素

前言

DOM(Document Object Model)即文档对象模型,针对HTML和XML文档的API(应用程序接口);DOM描绘了一个层次化的节点树,运行开发人员可以添加 / 移除和修改页面的某一部分;

HTML DOM 节点树

查找元素

元素节点查找方法 |方法 |描述| |-|-| |getElementById()|通过id查找HTML元素| |getElementsByClassName|通过class查找HTML元素| |getElementsByTagName()| 通过标签名查找HTML元素| |getElementsByName|根据name属性的值获取元素| |querySelector|根据css路径获取元素| |querySelectorAll|根据css路径获取元素|

(1)getElementById()

在DOM中查找HTML元素的最简单的方法,就是通过元素的id名来找到该元素。

var ids = document.getElementById("id名");

如果找到该元素,则该方法将以对象(在ids变量中)的形式返回该元素。如果未找到该元素,则ids将包含 null。

(2)getElementsByClassName()

可以通过标签元属的class名来查找,它返回的是一个类数组,可使用ids[0].innerHTML...的方式对标签进行操作。

var ids = document.getElementsByClassName("class名");

(3)getElementsByTagName()

通过标签名的方式返回的也是一个数组,也是使用下标对其进行操作。

var ids = document.getElementsByTagName("标签名"); 
  • 提示:通过类名查找 HTML元素在 IE 5,6,7,8 中无效。

(4)getElementsByName()

根据name属性的值获取元素,返回带有给定name特性的所有元素。

document.getElementsByName("name属性的值");

(5)querySelector()

根据css路径获取元素,接受一个css选择符,返回与该模式匹配的第一个元素,没找到则返回null。

document.querySelector("css路径");

(6)querySelectorAll()

根据css路径获取元素,也接受一个css选择符,只不过返回的是NodeList实例,没找到NodeList就是空的。

document.querySelectorAll("css路径");

JavaScript DOM:在容器中查找元素索引

JavaScript DOM:在容器中查找元素索引

如何解决JavaScript DOM:在容器中查找元素索引?

您可以使用Array.prototype.indexOf。为此,我们需要在某种程度上“铸成” HTMLNodeCollectiontrueArray。例如:

var nodes = Array.prototype.slice.call( document.getElementById(''list'').children );

然后我们可以调用:

nodes.indexOf( liNodeReference );

例:

var nodes = Array.prototype.slice.call( document.getElementById(''list'').children ),

    liRef = document.getElementsByClassName(''match'')[0];



console.log( nodes.indexOf( liRef ) );


<ul id="list">

    <li>foo</li>

    <li>bar</li>

    <li>baz</li>

</ul>

解决方法

我需要通过对象引用在其容器内找到元素的索引。奇怪的是,我找不到简单的方法。请不要jQuery-只有DOM。

UL
 LI
 LI
 LI - my index is 2
 LI

是的,我可以为每个元素分配ID并遍历所有节点以匹配ID,但这似乎是一个不好的解决方案。没有更好的东西吗?

因此,就像上面的示例一样,我有一个对第三个LI的对象引用。我怎么知道它是索引2?

谢谢。

javascript find方法查找元素

javascript find方法查找元素

javascript find 概述

find() 方法返回数组中满足测试条件的一个元素,如果没有满足条件的元素,则返回 undefined。

区别:findIndex()方法返回的是满足条件的元素的索引,而非它的值。

 

javascript find 语法

arr.find(callback[, thisArg])
登录后复制

参数

callback 在数组每一项上执行的函数,接收 3 个参数:

  1. element 当前遍历到的元素。
  2. index 当前遍历到的索引。
  3. array 数组本身。

thisArg 可选,指定 callback 的 this 参数。

立即学习“Java免费学习笔记(深入)”;

 

javascript find 描述

find方法对数组中的每一项元素执行一次callback 函数,直至有一个callback返回true。当找到了这样一个元素后,该方法会立即返回这个元素的值,否则返回undefined。注意callback函数只会在分配了值的数组索引上调用,而不会在已删除或未分配值的索引上调用。

调用callback函数带有3个参数:当前元素的值、当前元素的索引,以及数组本身。

如果提供了thisArg参数,那么它将作为每次callback函数执行时的上下文对象,否则上下文对象为undefined。

find方法不会改变数组。

在第一次调用callback函数时会确定元素的索引范围,因此在find方法开始执行之后添加到数组的新元素将不会被callback函数访问到。如果数组中一个尚未被callback函数访问到的元素的值被callback函数所改变,那么当callback函数访问到它时,它的值是将是根据它在数组中的索引所访问到的当前值。被删除的元素不会被访问到。

 

javascript find 实例

寻找数组中的质数

下面的例子展示了如何从一个数组中寻找质数(如果找不到质数则返回undefined)

function isPrime(element, index, array) {
    var start = 2;
    while (start  1);
}

console.log( [4, 6, 8, 12].find(isPrime) ); // undefined, not found
console.log( [4, 5, 8, 12].find(isPrime) ); // 5
登录后复制

javascript – 按自定义数据属性值查找元素

javascript – 按自定义数据属性值查找元素

我想知道是否有一种方法可以根据jQuery(jQuery UI lib)的数据属性值使用javascript选择一个项目(div,span,等等..).例如,假设我有:

<div>Hi</div>

然后我为它分配一些数据:

$('.b').data('myKey', 1234);

然后,我想找到满足条件myKey = 1234的div(或多个div).
例如,像这样:

var resultingElement = $('.b:data(myKey=1234)');

默认是可能的,还是我自己必须实现这种选择器?
不,我不想为此使用HTML5的可见数据 – *属性.

解决方法:

您可以创建自定义伪选择器以简化操作:http://jsfiddle.net/g2xKB/1/.

$.expr.pseudos.data = $.expr.createPseudo(function(args) {
    var items = args.split(",");  // the arguments (key, value)

    $.each(items, function(i, item) {
        item = item.trim();
        var isstring = /^['"]|['"]$/.test(item);
        item = item.replace(/^['"]|['"]$/g, "");  // remove quotes

        if(!isstring) {
            item = +item;  // if no quotes, it's a number
        }

        items[i] = item;
    });

    return function(elem) {
        return $.data(elem, items[0]) === items[1];
    }
});

然后您可以按如下方式使用它:

$(".b:data('myKey', 1234)").css("color", "red");

关于尝试在树javascript中递归查找元素js递归查找树形结构选中节点的id的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于JavaScript DOM基础:查找元素、JavaScript DOM:在容器中查找元素索引、javascript find方法查找元素、javascript – 按自定义数据属性值查找元素的相关信息,请在本站寻找。

本文标签:

上一篇React NavBar 无法摆脱一个点(react native tabbar)

下一篇APPLICATION_STREAM_JSON_VALUE 和 APPLICATION_NDJSON_VALUE 的区别(application/stream+json)