0

我在 Javascript 中有一个用 CKEDITOR 替换 textarea 的函数。

document.getElementById("text").action=CKEDITOR.replace(
         'body_content',
         {toolbar : 'big',
          height : '450',
          enterMode : CKEDITOR.ENTER_BR}
);

现在我想在同一个函数上用 CKEDITOR 替换 3 个文本区域。这 3 个区域的名称为 body_contentSOMETHING。

如何编写一个表达式来用任何东西替换 SOMETHING?

编辑:任何未定义的。应该是 Windows 文件研究中的 *.exe 之类的东西

4

3 回答 3

2

假设body_content{{something}}id,您可以使用属性选择器选择它们并循环:

var content_areas = document.querySelectorAll('textarea[id^="body_content"]');

for (var i = 0, l = content_areas.length; i < l; i++) {
    content_areas[i].action = CKEDITOR.replace(
         content_areas[i],
         {toolbar : 'big',
          height : '450',
          enterMode : CKEDITOR.ENTER_BR}
    );
}

为了与 IE 8 兼容,您可以使用textarea[id|="body_content"]( |=vs ^=),但这期望该值是整数或后跟 a -

<textarea id="body_content-something"></textarea>

或者添加 aclass到要查询的元素:

<textarea id="body_contentsomething" class="body_content"></textarea>
var content_areas = document.querySelectorAll('.body_content');

// ...

另外,在不知道document.getElementById("text")应该指什么的情况下,我不确定如何将其保留在片段中。

于 2013-10-08T17:32:32.457 回答
1

根据这个 SO 线程的回答,您可以像这样(jsfiddle)遍历 DOM:

function getElementsByIdStartsWith(selectorTag, prefix) {
    var items = [];
    var elements = document.getElementsByTagName(selectorTag);
    for (var i = 0; i < elements.length; i++) {
        if (elements[i].id.lastIndexOf(prefix, 0) === 0) {
            items.push(elements[i]);
        }
    }

    return items;
}

var affectedElements = getElementsByIdStartsWith("textarea", "body_content");
for(var i = 0; i < affectedElements.length; i++) {
    affectedElements[i].action = CKEDITOR.replace( /* ... */ );
}

但是,这不是很有效,对我来说听起来像是一个 XY 问题。最好首先避免这种情况,例如通过标记要替换为通用类的文本区域。然后你可以简单地做

var affectedElements = document.getElementsByClassName("common-class");
于 2013-10-08T17:27:20.903 回答
0
var updatedString = originalString.replace(/SOMETHING$/g,"whatever");
于 2013-10-08T17:10:47.517 回答