仅显示jquery中的所有段落

时间:2012-10-19 19:37:01

标签: jquery

我正在尝试学习jquery,所以我试图写一个脚本,它会隐藏页面上的大部分内容,只留下(现在)段落。

(function() {
  var all = $("*");
  all.hide();

  var paragraphs = $("p");
  paragraphs.show();
 })();

这是我现在的代码,但它不起作用。它隐藏了一切,但之后没有显示段落。我做错了什么?

7 个答案:

答案 0 :(得分:3)

这是一个开始的解决方案:

$("body :not(p)").hide();

将其读作:在<body>元素中找到所有 <p>的元素。

我怀疑你的标记很简单,嵌套元素最少,例如

<html>
<head></head>
<body>
    <h1>Heading</h1>
    <p>Paragraph 1</p>
    <div>Text block</div>
    <p>Paragraph 2</p>
</body>
</html>

否则,正如其他答案(和评论)中所述,您应该考虑您的<p>元素是否包含非<p>个父母。在这种情况下,嵌套段落可能仍然不可见。

答案 1 :(得分:2)

您无法显示隐藏父级的子级。你想要做的事情是行不通的。您必须确保<p>标记的祖先全部可见,一直到<body><html>

作为解决方法,您可以从父母那里分离所有<p>标签,隐藏身体内的所有内容,并将<p>直接重新附加到身体上。就恢复原状而言,你的dom将在此时不可逆转地被打破。

var paragraphs = $('p').detach();

$('body *').hide();

$('body').append(paragraphs);

我想不出任何实际用途。您可能需要重新考虑您要做的事情并更改标记以适应您的新知识。

答案 2 :(得分:1)

隐藏所有内容也会隐藏每个<p>的所有父元素,包括<html><body>。如果<p>元素可见,您需要确保它们可见。

相反,请显示段落及其父母:

$('*').hide();
$('p').parents().andSelf().show();

或者,只隐藏不包含段落的元素:

$(':not(:has(p), p)').hide();

答案 3 :(得分:1)

$('body :not(p)').hide();
$('body p').appendTo('body');

隐藏除了段落之外的所有内容,然后将段落移动为身体的直接子项。

请注意,“appendTo”和其他方法实际克隆元素,但只要它们已经存在于DOM中就移动它们。

答案 4 :(得分:0)

即使段落是可见的,包含它们的body仍然是隐藏的......所以即使你让它们可见,你也不会看到段落..因为父级是哪个是身体也是隐藏的..

答案 5 :(得分:0)

我的猜测是*通配符包含<body>。尝试:

$("body *").hide();
$("p").show().parents().show();

正如MarcB在评论中指出的那样,您需要.show()所有<p>个父母(这是.parents().show()所做的)

答案 6 :(得分:0)

如果其父母被隐藏,则不会显示P.

(function() {
  var all = $("body *").not("p");
  all.hide();
 })();

如果你想显示所有p但隐藏其他p,你可以将所有p附加到body身上:

(function() {
  var all = $("body *").not("p");
  all.hide();
   $("p").appendTo('body');
 })();