javascript - 可重用的 CSS 编辑功能

标签 javascript

我已经为此寻找了解决方案。我无法使用 jQuery,也无法使用 JavaScript,但它必须是 JavaScript 语言。

我想使用一个函数来编辑我单击的 div 的子级。我还想重用该功能

这是标记:

function expdr() {
	if (this.style.display == "block") {
		this.style.display = "none";
	} else {
		this.style.display = "block";
	}
}
.bigMe    {display: block;}
<div id="whole">

	<div id="bleb" onclick="expdr()">
	  <h2>Headline Here!</h2>
	  <p>Paragraph here also. Isn't it a lovely day? Actually I'm asking because I'm stuck in an office.</p>
	  <div class="bigMe">
	    <p>This is a paragraph in a second comp class</p>
	  </div>
	</div>
	
	<div id="bloab" onclick="expdr()">
      <h2>Headline Here!</h2>
	  <p>Paragraph here also. Isn't it a lovely day? Actually I'm asking because I'm stuck in an office.</p>
	  <div class="bigMe"> <!-- Div ARRAY = 4 -->
	    <p>This is a paragraph in a second comp class</p>
	  </div>
	</div>

</div>

提前感谢您对我的宽容,再说一次,我在 JavaScript 方面遇到了困难。

最佳答案

尽量避免内联操作 - 这可能会导致问题,并且可能会变得相当困惑。最好一起做。

https://jsfiddle.net/22vjokv2/

让我们来看看这个 -

首先,我们将删除内联 JS 调用并向容器添加一个类 -

<div id="whole">
    <div id="bleb" class='article'>
         <h2>Headline Here!</h2>

        <p>Paragraph here also. Isn't it a lovely day? Actually I'm asking because I'm stuck in an office.</p>
        <div class="bigMe" id='bigMe1'>
            <p>This is a paragraph in a second comp class</p>
        </div>
    </div>
    <div id="bloab" class='article'>
         <h2>Headline Here!</h2>

        <p>Paragraph here also. Isn't it a lovely day? Actually I'm asking because I'm stuck in an office.</p>
        <div class="bigMe" id='bigMe2'>
            <!-- Div ARRAY=4 -->
            <p>This is a paragraph in a second comp class</p>
        </div>
    </div>
</div>

请注意,我还为每个 bigMe 提供了一个 ID,只是为了让事情更清楚地了解其工作原理。

我们需要做的下一件事是定义我们的元素并附加一些监听器,这本质上是您的 onclick 正在做的事情,但在 JS 中以正确的方式进行.

var articles = document.getElementsByClassName("article");

for (var i = 0; i < articles.length; i++) {
    articles[i].addEventListener("click", expdr, false);
};

这里我通过搜索该类来定义 articles,还记得我将 article 类添加到 bigMe 元素吗?

然后我循环这些元素并按索引分配一个监听器,我说 onclick 触发 expdr 并且 false 正在冒泡。

接下来让事情发生 -

function expdr() {
    var bigMe = this.querySelector('.bigMe');
    switch (bigMe.style.display) {
        case "block":
            bigMe.style.display = "none";
            break;
        case "none":
            bigMe.style.display = "block";
            break;
        default:
            bigMe.style.display = "none";
            break;
    }
}

因此您可以保留函数expdr,但需要进行一些更改。我们要做的第一件事是获取我们的子元素。在本例中,它是 bigMe,我使用 querySelector() 来查找它。请注意,我说 this.querySelector 我可以使用 this 的原因是因为调用该方法的元素是 articles 所以 this = = 被点击的文章

现在我们有了 bigMe,我们需要用它来做一些事情。 switch 语句在这里会更有效。原因是在 JS 中,当你有 IF 时,它会一直向下求值。因此,如果您检查 block 并更改为 none,那么在下一个语句中您检查 none ,它会认为该元素设置为 ,因此将其设置回阻止。什么都不会发生。

switch 语句有中断。一旦语句的计算结果为 true,它就会执行其 block 中的任何内容并退出。我还添加了一个 default 语句,该语句包罗万象,将确保无论发生什么事情。

希望这有帮助!

关于javascript - 可重用的 CSS 编辑功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32970868/

相关文章:

javascript - 停止 anchor 元素重新加载和/或滚动到顶部

javascript计算单词总和

javascript - 如何在 Node.js 中打印从 mongoDB 数据库检索的数据?

javascript - 为连续选定的表格单元格设置样式

javascript - 我们如何以一种形式使用 Angular 2 来处理事件

javascript - 重新定位 contenteditable div 的光标

javascript - jQuery 在 5 秒后隐藏/删除 DIV 内容

javascript - 如何在 brython 中创建 websocket JSObject?

javascript - 对具有 "A/B"格式的数字的数组进行排序?

javascript - 未定义错误的属性在刷新时消失