0

在我的页面中,我想在 div id=question 中更改 id 为 answer1 的 div 的类名。我怎样才能做到这一点?谢谢。

$('question1 answer1').addClassName('new_name');

<div id="question1">
   <div id="answer1" class="old_name">
   </div>
</div>

<div id="question2">
   <div id="answer2" class="old_name">
   </div>
</div>
4

2 回答 2

0

只需简单地$('answer1')为您提供所需的 div 元素的引用。该$函数返回具有给定 id 字符串的元素(如果没有找到,则返回 null)。请注意,您在使用时不使用选择器字符串$- 它仅对 id 进行操作。

$$函数接受一个 CSS 选择器字符串并返回一个包含所有匹配元素的数组,如果没有匹配则返回一个空数组。如果您想要或需要走这条路,您可以像这样找到相同的 div:

$$('#question1 .answer1')[0]

使用上述任一方法获得元素引用后,您可以使用addClassNameremoveClassName或任何其他可用的元素方法。

于 2012-05-26T14:06:44.570 回答
0

因此,正如已经指出的那样,任何选择器方法都需要某种迭代器,因此您不能只将方法应用于所有返回的对象。您会在文档中注意到Element.select,这应该可以减轻必须将对象显式转换为数组的情况,但我在 jsfiddle 上没有运气。但是,我确实尝试了以下方法:

 $('answer2').addClassName('new_name');

​它工作得很好。我不知道问题是否在于您正在尝试遍历原始元素对象中的 DOM(通过使用 question1 answer1),这需要对象/数组迭代器,或者它是否只是代码中其他地方的一个小问题。但是在您的具体示例中,由于您知道要更改其类的实际元素的 id,因此上面的代码应该可以正常工作,而无需指定父元素或使用任何类型的数组索引。

我承认prototypejs让我失望了,因为它们对Element对象使用与Enumerable对象相同的方法名,所以我看到了第一个实例select并认为它看起来很简单。现在已经看到几乎每个类/方法都需要您设置一个选择器并转换它或手动遍历它,我肯定会说这会很多使用 jquery 更容易,并且在这种情况下,您最初评论它们几乎相同是不正确的。也许 protojs 提供了一些 jquery 没有的功能,也许您的代码与 protojs 相关联(我在一个项目上工作了一年,不得不使用 YUI,这是一个更大的噩梦,相信我),但 jquery 设置为可玩对prototypejs很好,所以在这种情况下,我会考虑同时使用两者。在 jquery 中,代码应该是:

jQuery.noConflict();  // Avoids $ fight between jquery and prototypejs
jQuery( '#question1 #answer1' ).addClass('new_name');

或者,首先删除旧的:

jQuery.noConflict();  // Avoids $ fight between jquery and prototypejs
jQuery( '#question1 #answer1' )removeClass('old_name').addClass('new_name');

此外,prototype 有一个 toggleClass 方法,它可能也是不必要的深奥,但也许你应该阅读: toggleClassName

而且我不会因为在这上面浪费时间而生气(因为我不喜欢认为卡在学习新框架上是浪费时间),除了他们的文档虽然很有吸引力,但有我见过的最糟糕的例子见过。他们都假设您有一些基本的想法,而没有一个友好的现实世界示例或超链接到实例和类之间的差异,并且他们区分两者的示例是相同的。我今天晚些时候肯定会花一些时间来找到你问题的真正最佳答案,出于恶意和自豪,如果没有别的,但如果真的归结为每次都必须迭代器,只需使用 vanilla js 和在实际有用时使用此框架。

于 2012-05-26T14:19:10.283 回答