因此,正如已经指出的那样,任何选择器方法都需要某种迭代器,因此您不能只将方法应用于所有返回的对象。您会在文档中注意到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 和在实际有用时使用此框架。