Prototype.js-$(...)。next不是函数

时间:2018-11-20 10:12:31

标签: javascript jquery prototypejs

我尝试将我的代码从jQuery转换为prototype.js。我执行以下代码,但得到$(...).next is not a function

var editorCounter = 0;
var newEditorIds = [];

$$(".input-text.mceEditor").each(function() {
    var next = $(this).next();
    var tagName = next.prop("tagName");

    if (typeof(tagName) == "undefined") {
        var newId = "newEditor_" + editorCounter;
        $(this).attr("id", newId);
        newEditorIds.push(newId);
        editorCounter++;
    }
});

newEditorIds.each(function(name, index) {
    tinymce.EditorManager.execCommand('mceAddEditor', true, name);
});

它没有完全转换为prototype.js。我仍然必须找出prop()attr()的等效项。 不过,由于我在this site 上告诉了我自己,它仍然可以正常工作。


原始的jQuery代码:

var editorCounter = 0;
var newEditorIds = [];

jQuery(".input-text.mceEditor").each(function() {
    var next = jQuery(this).next();
    var tagName = next.prop("tagName");

    if (typeof(tagName) == "undefined") {
        var newId = "newEditor_" + editorCounter;
        jQuery(this).attr("id", newId);
        newEditorIds.push(newId);
        editorCounter++;
    }
});

jQuery.each(newEditorIds, function(i, v) {
    tinymce.EditorManager.execCommand('mceAddEditor', true, v);
});

1 个答案:

答案 0 :(得分:3)

您使用的

Array.prototype.each未设置this。您应该在回调函数中提供一个参数来接收元素。因此:

$$(".input-text.mceEditor").each(function(element) {
    var next = element.next();

(您可以使用$(element),但是除了您不知道element是ID还是Element之外,它什么都不会做。原型使用猴子补丁,没有包装,因此您可以直接使用裸Element。)


转换后的代码:

var editorCounter = 0;
var newEditorIds = [];

$$(".input-text.mceEditor").each(function(element) {
    var next = element.next();

    if (typeof(next) == "undefined") {
        var newId = "newEditor_" + editorCounter;
        element.id = newId;
        newEditorIds.push(newId);
        editorCounter++;
    }
});

newEditorIds.each(function(name, index) {
    tinymce.EditorManager.execCommand('mceAddEditor', true, name);
});