【问题标题】:add extra divs to the dom jquery ( toogle click more function)向 dom jquery 添加额外的 div(切换单击更多功能)
【发布时间】:2014-02-27 08:54:51
【问题描述】:

这是我在这个网站上的第一篇文章,我只是想知道是否有人可以帮助我解决一个已经持续一周的问题,我对 javascript 了解不多,但我会尝试将问题解释为尽我所能。

例如,当您在第 1 列和第 2 列中按“更多”时,您将看到 右侧柱下的间隙。这些是我需要的间隙 填充额外的 div。

用额外的 div 填补空白会很棒(与 列像引用或图像,但当然具有相同的功能),现在我查看了 >tutorials 基于 “将元素添加到 DOM jquery”,但我没有得到它 :( 阅读并 阅读它,仍然不明白它。这是带有的列 功能,一旦你按下"More",你就会看到差距

图像显示了下一个同时出现的额外隐藏 div 延伸到填补空白的列以使另一列 甚至没有延长

JSFiddle

picture of the gaps

click_toggle.js

clickMenu = function(menu,element,cname) {
    var getEls = document.getElementById(menu).getElementsByTagName(element);

    for (var i=0; i<getEls.length; i++) {
            getEls[i].onclick=function() {
            if ((this.className.indexOf(cname))!=-1)
            {
            if ((this.className.indexOf('click'))!=-1) {
                this.className=this.className.replace("click", "");;
                }
                else {
                this.className+=" click";
                }
            }
        }
    }
}

更多.css:

.cf:before,
.cf:after {
    content: " ";
    display: table;
}

.cf:after {
    clear: both;
}
/* Float classes */
.f_right { float: right; }
.f_left { float: left; }



/* always visible */
#outer .holder {padding:1em; border:1px solid #ddd; margin:0 20px 10px 0;}
#outer .holder p {padding:5px 0 0 0; margin:0;}
#outer .holder p.bold {font-weight:bold;}
#outer .holder h2 {margin:0; padding:0;}

/* unclicked style div.more */
#outer div.more i {float:right; margin-right:-10px 10px 0 0; cursor:pointer; color:#c00; font-weight:bold;}
#outer div.more i.hide {display:none;}
#outer div.more p {display:none;}
#outer div.more img {display:none;}

/* clicked style div.click */
#outer div.click i.show {display:none;}
#outer div.click i.hide {display:block;}
#outer div.click p {display:block;}
#outer div.click img {display:block; float:left; padding-right:10px;}

【问题讨论】:

  • 如果系统告诉您不能在不包含代码的情况下包含指向 jsfiddle 的链接,您可能应该包含一些代码。
  • 现在可以了吗?不知道该放什么,它不会让我按代码选项。
  • 您的问题中没有代码"More" 不是代码。根据您的标签,您的问题是关于htmlcssjavascript。也许在那里添加一些?你有一个 jsfiddle,所以大概那里的一些代码与这个问题有关?
  • 现在可以了吗? js fiddle 就在这个问题上,我在这里再说一遍:jsfiddle.net/angie333/2YAxe/1

标签: javascript jquery html css


【解决方案1】:

您的标记/代码有点难以理解。以下是我的做法:

JSFiddle

我使用 JQuery 使代码更易于使用,并使用一些更简单的标记来阐明示例。请注意,因为我在 JQuery 中使用了 parent/find 方法,并且给定了所有类,所以很容易拥有多个框并且每个框都将独立工作。

您可以将想要显示和隐藏的任何内容放在“extraContent”div 中 - 在我的示例中,我放置了一些标题、段落和图像,但这可以是任何内容。

Javascript:

$(function() {

$(".toggleLink").on("click", function() {
    // $(this) will be the "more" / "less" link that was clicked.
    // Find its parent, then inside that - select the "extra content"
    // box and toggle its visibility
    var extraContentBox = $(this).parent().find(".extraContent");
    extraContentBox.toggle();

    // Update the text of the toggle link based on the new visiblility
    // of the "extra content" div
    var linkText = (extraContentBox.is(':visible')) ? "less" : "more";
    $(this).parent().find(".toggleLink").text(linkText);
});

});

更新:

我认为您需要进行试验才能使其看起来正确。以下是您可能需要的一些基本内容:

要隐藏一个元素,首先添加“display: none;”到 CSS,或者像这样的样式标签:

<div style="display: none;"></div>

要使用 JQuery 选择元素,请使用 #id.class,例如:

$("#someElementID").show();
$(".someClass").hide();

使用 ID 为特定元素命名(在页面上必须是唯一的)。对多次使用的事物使用类。

点击元素时做某事:

$("#someElement").on("click", function() {
    // code here
});

判断一个元素是否可见:

var isVisible = $("#someElement").is(":visible");
if (isVisible) { 
    // do something
}

获取元素的高度:

var height = $("#someElement").height();

设置元素的高度:

$("#someElement").height(100);

【讨论】:

  • 希望它能出来,我还有最后一个问题,当页面扩展时,我如何阻止 div 因为这个功能而移动?
  • 内容将四处移动以适应展开的元素 - 这是很自然的,因为元素的定位方式(通常,事物堆叠在其他元素下方,或堆叠在它们的侧面等)。有“位置:绝对;”将元素从自然“流”中取出并让它们出现在特定位置,但最终可能会掩盖其他内容。查找 CSS 定位以获取更多信息。或者,如果希望允许元素在页面上移动,但仍希望确保某些内容可见,您可以使用 api.jquery.com/scrolltop 滚动页面
【解决方案2】:

如果我正确理解您的问题,我想您的意思是要匹配框的高度,以便它们彼此相邻排列?显示新内容后,您可以使用 Javascript 更新包含 div 的高度。

在您的点击处理程序中,显示/隐藏额外内容后,您可以(对于每一行)获取每个框的高度,并更新其他框以匹配最高框的高度。

如果您使用的是 JQuery,请查看 https://api.jquery.com/height/ - 您可以使用它来获取元素的高度或设置它。

至少在我的浏览器中,您的行看起来每行有两列 - 而不是四列。如果是这种情况,您需要执行一些逻辑来遍历行并处理成对的框。

【讨论】:

  • 不,我的意思是添加额外的 div 以覆盖由于“更多”功能而导致列扩展(出现隐藏内容)时的空白。例如,当您在第 1 列中按“更多”并2 您会在右侧的列下方看到一个间隙。这些是我需要用额外的 div 填充的间隙。
  • 为什么需要添加额外的div?他们会有任何内容,还是您只是说创建空 div 来纠正填充/对齐?如果是这样的话,最好只调整你已经拥有的 div 的大小。
  • 在与隐藏文本同时出现的列下添加隐藏的额外 div,并在按下“更多”时扩展列(我会添加一个文本引用,另一个 div 会有一个图片)来填补空白,我应该放一张图片以获得更好的想法吗?
  • 我只是不知道如何在 click toogle.js 函数和 css 中添加额外的隐藏 div :( 请帮助
  • 努力理解你的意思 - 但我已经做了另一个可能有帮助的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-15
  • 1970-01-01
相关资源
最近更新 更多