0

如何从第三段隐藏到最后一段?到目前为止,我设法只隐藏了第一个:

<p>A</p>
<p>B</p>
<p>C</p>
<p>D</p>
<p>E</p>

<script>
document.getElementsByTagName("p")[2].style.display="none";
</script>
4

2 回答 2

3

因为它用 jQuery 标记:

$('p:gt(1)').hide();

:gt = 选择匹配集中索引大于索引的所有元素(从零开始)

于 2013-09-10T22:13:52.030 回答
1

我的第一个想法是直接使用 CSS:

p:nth-child(n + 3) {
    display: none;
}

JS 小提琴演示

或者使用纯 JavaScript:

var pElems = document.getElementsByTagName('p');

for (var i = 2, len = pElems.length; i < len; i++) {
    pElems[i].style.display = 'none';
}

JS 小提琴演示

当然,仅仅因为它是可能的(是的,你可以这样做,但这并不意味着你应该这样做),我们也可以扩展Array原型,并利用slice, 和call

Array.prototype.css = function (prop,val) {
    var self = this;
    for (var i = 0, len = self.length; i < len; i++) {
        self[i].style[prop] = val;
    }
    return self;
};
[].slice.call(document.getElementsByTagName('p'), 2).css('display','none');

JS 小提琴演示


针对问题进行编辑,由 OP 留在评论(下方)中:

隐藏最后一个的最短 [JavaScript] 是<p>什么?

我不经常参加“最短”的比赛(有点代码高尔夫的味道,尽管技术往往令人印象深刻);然而,最简单的方法是在评论中写的:

var pArray = document.getElementsByTagName("p");
pArray[pArray.length-1].style.display="none";

我最初建议使用pop()(忘记 aNodeList没有pop()方法)所以,为了进一步推进上述原型扩展方法(并避免重新创建pop(),主要是因为slice()在以后的情况下似乎更有用:

Array.prototype.css = function (prop,val) {
    var self = this;
    for (var i = 0, len = self.length; i < len; i++) {
        self[i].style[prop] = val;
    }
    return self;
};

NodeList.prototype.slice = function (a,b) {
    return [].slice.call(this, a, b);
}
var pArray = document.getElementsByTagName("p");

pArray.slice(-1).css('display','none');

JS 小提琴演示

参考:

于 2013-09-10T22:13:37.877 回答