Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用JavaScript查找同一html类的三个实例中的两个?_Javascript_Html - Fatal编程技术网

如何使用JavaScript查找同一html类的三个实例中的两个?

如何使用JavaScript查找同一html类的三个实例中的两个?,javascript,html,Javascript,Html,我有三个元素具有相同的“child”类。假设我不能向添加任何其他类。如何使用JavaScript只找到其中两个div元素(第二个和第三个)?(下面的代码只是为了更好地理解我的意思-请注意,具有相同类的元素不是兄弟元素) DOM定义了一个函数,返回一个对象: 在您的例子中,这将返回3个带有“child”类名的div元素。然后,您可以使用以下语法访问此列表中的给定元素,例如: var secondElem = elementsWithChildClass[1]; var thirdElem = e

我有三个
元素具有相同的“child”类。假设我不能向
添加任何其他类。如何使用JavaScript只找到其中两个
div
元素(第二个和第三个)?(下面的代码只是为了更好地理解我的意思-请注意,具有相同类的
元素不是兄弟元素)


DOM定义了一个函数,返回一个对象:

在您的例子中,这将返回3个带有“child”类名的
div
元素。然后,您可以使用以下语法访问此列表中的给定元素,例如:

var secondElem = elementsWithChildClass[1];
var thirdElem = elementsWithChildClass[2];
在您的情况下,这两个对象都将是实例(继承自)

注意:HTMLCollection对象的索引是从零开始的,这意味着使用
[0]
访问第一个元素,使用
[1]
访问第二个元素,依此类推

DOM定义了一个函数,该函数返回一个对象:

在您的例子中,这将返回3个带有“child”类名的
div
元素。然后,您可以使用以下语法访问此列表中的给定元素,例如:

var secondElem = elementsWithChildClass[1];
var thirdElem = elementsWithChildClass[2];
在您的情况下,这两个对象都将是实例(继承自)

注意:HTMLCollection对象的索引是从零开始的,这意味着使用
[0]
访问第一个元素,使用
[1]
访问第二个元素,依此类推


修改后的问题:如何使用
class=“child”
获取最后两个元素,而不是查看它们与JavaScript嵌套的级别(第二级和第三级)

您不需要jQuery来完成这项工作。 一个至少可以一直到ES3的答案可能是这样的。在这种情况下,提供一个
parentId
允许您将三个
.child
类作为目标组,而不是让JavaScript收集所有
.child

function get2ndAnd3rdClassNodes(parentId, targetClass)
{
    var targets = [];
    var nodes = document.getElementById(parentId).getElementsByClassName(targetClass);

    for(var i = 1, length = nodes.length; i < length; ++i)
    {
         target[i - 1] = nodes[i];
    }

    nodes = null;
    return targets;
}
有时,将DOM访问与处理DOM返回值的代码分离是有利的。在这种情况下,函数可以处理节点,而不是从id(和目标类名)开始
.getElementsByClassName()
返回节点列表,它是一个类似数组的对象,但仍然是一个对象。为了使用JavaScript数组方法,实际上需要将其强制转换为数组

function get2ndAnd3rdClassNodes(nodes, targetClass)
{
    nodes = nodes.getElementsByClassName(targetClass);   
    return Array.prototype.splice.call(nodes, 1, 2);
}
或者,在一行中:

function get2ndAnd3rdClassNodes(nodes, targetClass)
{
    return Array.prototype.splice.call(nodes.getElementsByClassName(targetClass), 1, 2);  
}
最后,如果您希望能够以灵活的方式确定要去除多少元素:

function spliceClassNodes(nodes, targetClass, startIndex, nodesNeeded)
{
    var minNodes = startIndex + nodesNeeded;

    try
    {
        if(nodes.length < minNodes)
        {
            throw new RangeError('Only ' + nodes.length + ' received. Needed ' + minNodes + ' to process this nodeList correctly.');
        }

        return Array.prototype.splice.call(nodes.getElementsByClassName(targetClass), startIndex, nodesNeeded);
    }
    catch(e)
    {
        if(e instanceof RangeError)
        {
            //Handle the problem. 
        }
    }

    return;
}

请随意将其添加到原型中。

修改后的问题:如何使用
class=“child”
获取最后两个元素,而不是查看它们与JavaScript嵌套的级别(第二级和第三级)

var slice = function(elements, start, end) {
    var sliced = Array.prototype.slice.call(elements, start, end);
    return sliced;
};

var totalChildElem = document.getElementsByClassName("child");

if (totalChildElem.length)
{
    var myChildElem = slice(totalChildElem,1);
}
您不需要jQuery来完成这项工作。 一个至少可以一直到ES3的答案可能是这样的。在这种情况下,提供一个
parentId
允许您将三个
.child
类作为目标组,而不是让JavaScript收集所有
.child

function get2ndAnd3rdClassNodes(parentId, targetClass)
{
    var targets = [];
    var nodes = document.getElementById(parentId).getElementsByClassName(targetClass);

    for(var i = 1, length = nodes.length; i < length; ++i)
    {
         target[i - 1] = nodes[i];
    }

    nodes = null;
    return targets;
}
有时,将DOM访问与处理DOM返回值的代码分离是有利的。在这种情况下,函数可以处理节点,而不是从id(和目标类名)开始
.getElementsByClassName()
返回节点列表,它是一个类似数组的对象,但仍然是一个对象。为了使用JavaScript数组方法,实际上需要将其强制转换为数组

function get2ndAnd3rdClassNodes(nodes, targetClass)
{
    nodes = nodes.getElementsByClassName(targetClass);   
    return Array.prototype.splice.call(nodes, 1, 2);
}
或者,在一行中:

function get2ndAnd3rdClassNodes(nodes, targetClass)
{
    return Array.prototype.splice.call(nodes.getElementsByClassName(targetClass), 1, 2);  
}
最后,如果您希望能够以灵活的方式确定要去除多少元素:

function spliceClassNodes(nodes, targetClass, startIndex, nodesNeeded)
{
    var minNodes = startIndex + nodesNeeded;

    try
    {
        if(nodes.length < minNodes)
        {
            throw new RangeError('Only ' + nodes.length + ' received. Needed ' + minNodes + ' to process this nodeList correctly.');
        }

        return Array.prototype.splice.call(nodes.getElementsByClassName(targetClass), startIndex, nodesNeeded);
    }
    catch(e)
    {
        if(e instanceof RangeError)
        {
            //Handle the problem. 
        }
    }

    return;
}

可以随意将其添加到原型中。

使用选择器和数组魔法:
var els=array.from(document.querySelector('.child')).splice(1)
$(.child”).not(“:eq(0)”);如果你可以使用一些稳定的东西(使用jQuery)@Bergi-slice也可以,但是两者都可以,因为OP对原始数组不感兴趣。对于那些吹捧jQuery的人:它没有被标记或要求,并且比POJS更重要,这取决于浏览器。@JohnWeisz没有回答第一个问题“这个被剪掉的代码在页面上只出现一次吗”,我不确定你的评论的价值。当然,
.getElementsByClassName()
可以在任何DOM元素上使用。这在这里不是问题。问题是,如果上面的代码片段在页面上只出现一次,那么每次索引1和索引2都将指向相同的两个元素。谢谢您的输入。@JohnWeisz更正:问题是,如果上述代码段在页面上出现多次,则每次索引1和2都将指向相同的两个元素。感谢您的输入。使用选择器和数组魔法:
var els=array.from(document.querySelector('.child')).splice(1)
$(.child”).not(“:eq(0)”);如果你可以使用一些稳定的东西(使用jQuery)@Bergi-slice也可以,但是两者都可以,因为OP对原始数组不感兴趣。对于那些吹捧jQuery的人:它没有被标记或要求,并且比POJS更重要,这取决于浏览器。@JohnWeisz没有回答第一个问题“这个被剪掉的代码在页面上只出现一次吗”,我不确定你的评论的价值。当然,
.getElementsByClassName()
可以在任何DOM元素上使用。这在这里不是问题。问题是,如果上面的代码片段在页面上只出现一次,那么每次索引1和索引2都将指向相同的两个元素。谢谢您的输入。@JohnWeisz更正:问题是,如果上述代码段在页面上出现多次,则每次索引1和2都将指向相同的两个元素。谢谢你的意见。这有可重用的好处。您可以将其添加到原型中。这具有可重用的优点。您可以将其添加到原型中。这是一个很好的尝试,但有一个逻辑错误<代码>var TotalChild
var slice = function(elements, start, end) {
    var sliced = Array.prototype.slice.call(elements, start, end);
    return sliced;
};

var totalChildElem = document.getElementsByClassName("child");

if (totalChildElem.length)
{
    var myChildElem = slice(totalChildElem,1);
}