我在附加课程时遇到困难
I'm having difficulty appending a class
我最初想不出一种方法将一个额外的类附加到具有其他 li 元素具有的类的 li 元素中。我只想向我单击选择按钮的特定 li 元素添加一个类,解决方案是"单击按钮时,您可以使用 .closest(( 查找祖先 li 元素"。该解决方案是一个jquery解决方案,它工作正常,但现在我遇到了一个额外的问题。首先,这是我最初发布的内容以及我与小提琴一起得到的解决方案,然后我将解释我的新问题是什么,并将不胜感激。所以我的原始帖子:
"好的,所以我的脚本允许我在文本区域元素中输入文本,并将其添加到 ID 为"Glist"的有序列表中的 li 元素中。不仅文本被添加到我添加到排序列表中的每个 li,而且还添加了下面的其他内容,它们都只是使用 CSS 显示额外的图像。其中一个类,"Selimg"显示一个按钮的精灵图像,上面写着"选择"。现在,我添加到ol中的每个li元素都具有以下所有元素以及类。因此,每个li元素都有一个带有"Selimg"类的div,该类显示一个按钮的图像,例如选择。当我用类 Selimg 单击这个div 时,一个名为"已选择"的新类将被添加到div 中,该类将更改 li 的背景颜色以指示它已被选中。问题是,我只想将"选定"类添加到带有我单击的 Selimg 类的div 中,而不是所有带有"Selimg"类的 li 元素。如何使用 onclick 事件处理程序或使用 js 或 jquery 的任何其他方式做到这一点?这是 html:
<ol id="GList">
<li class="MyList">
<p class="bulletp"></p>
<!--This Selimg class displays an image of a button that says select-->
<div class="Selimg"></div>
<!--When a user presses this select button, I want to append a class only to the specific li element the user has pressed the select button on. -->
<div class="edit1"></div>
<div class="Del"></div>
<div class="progress"></div>
<div class="ShowMore"></div>
<div class="CheckedGoal"></div>
<div class="PCompetePercent"></div>
<div class="ShowMoreBlock"></div>
<div class="goalTxt"></div>
</li>
</ol>
The solution I was given:
"On the click of the button, you can use .closest() to find the ancestor li element"
$('.Selimg').click( function() {
$(this).closest('li').addClass('someclasss')
//or $(this).parent().addClass('someclasss') since the li is the parent of the button
})
这是演示解决方案的小提琴: http://jsfiddle.net/arunpjohny/fSMDv/2/
现在是新问题。出于某种原因,jquery 解决方案无法自行运行。不知何故,上面的jquery代码只有在我将其放入js函数中时才起作用,如下所示:
<script>
function runSel() {
var $li = $('.Selimg').closest('li').addClass('liselected');
$li.siblings().removeClass('liselected');
}
</script>
我还有一个函数,每当我想向列表中添加另一个项目时都会调用该函数。
//This is only the part of the code that creates the div that I style to look like and be used as a button that says select. There's more code that also creates the li element itself and a few additional things but all for design. Nothing important.
var Selimg = document.createElement('div');
Selimg.setAttribute("class", "Selimg");
Selimg.setAttribute("onclick", "runSel();");
entry.appendChild(Selimg);
这样做的作用是,使用类"Selimg"创建div,该类将是添加到我的列表项中的选择按钮的图像,然后赋予调用上面的runSel((函数的onclick属性,如您所见。它有效。但是,它只能工作一次。小提琴示例演示了我正在寻找的内容。所以现在,当我将一个项目添加到列表中,然后单击其上的选择按钮时,调用函数"runSel",它添加了一个名为"liselected"的类,并且liselected只是更改背景颜色,因为css中每个属性的规则都有"!important",所以背景颜色覆盖了当前颜色。它有效,但就像我说的,它只有效一次。在我添加另一个项目后,按该项目上的选择按钮(由 Selimg 类中的样式制成(,liselected 类将从另一个 li 元素中删除,但我刚刚单击选择按钮的第二个 li 元素,只会导致 liselect 类从第一个中删除,但之后不会添加到第二个 li 项, 当前的。因此,当我添加多个 li 时,它们将包含文本和div 等内容,样式看起来像一个说"选择"的按钮,因此当我在 li 上单击"选择"时,我希望该特定 li 附加 liselect 类,当我选择另一个 li 上的"选择"按钮时, 我希望从它所在的另一个 li 元素中删除类 liselect 并添加到该元素中。
jQuery 解决方案可以正常工作...问题是您正在处理动态创建的元素...所以需要使用事件委托
$(document).on('click', '.Selimg', function() {
$(this).closest('li').addClass('someclasss')
//or $(this).parent().addClass('someclasss') since the li is the parent of the button
})
另外据我了解,您尚未在 dom 就绪处理程序中添加脚本
演示:小提琴
不知道你为什么要为这么小的问题写一本书。 我的意思是,我厌倦了在前 30 行没有触及问题重点之后阅读你写的内容。
使用:改用$(this).parent('li').addClass("...")
。
js小提琴
- 将PHP变量传递给jQuery时遇到问题
- 在AJAX回调和呈现PIXIJS之间处理程序流时遇到了问题
- 将jQuery转换为用户脚本的普通Javascript时遇到问题
- 在javaservlet doPost方法中启动线程时,无法返回异常消息
- 将子文档推送到父数组时遇到问题
- JQuery FullCalendar在从ajax成功调用rerenderEvents时遇到问题
- 在将javascript附加到我的html中时遇到问题
- 为什么我在以编程方式打开窗口时遇到问题
- 在将缩略图链接到模态时遇到问题
- 在我的网站上创建一个在1-10之间不断变化的数字时遇到了问题.Javascript
- 使用 ng 模型获取数据时遇到问题
- 是否有其他人在设计Twitter Typeahead时遇到问题'的搜索栏
- 使用jquery进行整数比较时遇到问题
- 使用PhantomJS下载动态web内容时遇到问题
- 设置RequireJS时遇到问题
- 当javascript是单线程时,谁是onreadystatechange的调用者
- 在性能方面遇到困难时,我该如何将其更改为用于循环
- 如何自动更新一个论坛线程时,新的帖子
- spin.js在IE和FF上长时间运行线程时停止旋转
- 为什么node.js在单线程时速度很快?