2013-03-21 108 views
4

我正在开发富文本编辑器,并且一直做得很好。我制作了一个单独的.js文件将其用作插件。Javascript:通过类名获取元素不起作用

现在我想通过.cshtml文件给它一个类名来使用这个插件。但它似乎没有工作,我搜索了相关的答案,他们说使用document.getElementsByClassName将解决我的问题。

请通过这段代码告诉我哪里出了问题?

文本编辑的.js -

var richTextEditor = document.getElementsByClassName("text-editor"); 
    richTextEditor.contentDocument.designMode = 'ON'; 
    $('#strong').live('click', function() { 
     richTextEditor.contentDocument.designMode = 'ON'; 
     richTextEditor.contentDocument.body.contentEditable = true; 

     richTextEditor.contentDocument.execCommand('bold', false, null); 
     richTextEditor.focus(); 
    }); 

CSHTML文件 -

<script src="/js/Texteditor.js" type="text/javascript"></script> 
<script src="/js/jquery.js" type="text/javascript"></script> 
<div id="strong" class="command btn"><i class="icon-bold icon-black"></i></div> 



    <iframe id="edtNoteCreate" class="text-editor" name="DisplayNote" style="width:430px;height:150px;">@((Model.Note != null ? Model.Note : ""))</iframe> 
+2

[阅读文档。](https://developer.mozilla.org/en-US/docs/DOM/document.getElementsByClassName)'getElementsByClassName'返回多个元素。 – 2013-03-21 04:02:07

回答

7

只要采取的第一项的匹配的节点;它是一个NodeList,但可以像Array一样被解引用。

var richTextEditor = document.getElementsByClassName("text-editor")[0]; 
3

getElementsByClassName方法返回一个数组所以使用这样

var richTextEditor = document.getElementsByClassName("text-editor"); 
    richTextEditor[0].contentDocument.designMode = 'ON'; 
    $('#strong').live('click', function() { 
     richTextEditor[0].contentDocument.designMode = 'ON'; 
     richTextEditor[0].contentDocument.body.contentEditable = true; 

     richTextEditor[0].contentDocument.execCommand('bold', false, null); 
     richTextEditor[0].focus(); 
    }); 
+4

为什么重复'[0]'?当声明var时给'[0]'。 :) – 2013-03-21 04:11:40

+0

@prasath k,为什么它返回一个数组? – Manoj 2013-03-21 04:12:28

+1

document.getElementsByClassName ..正如你所看到的,它通过类名得到ELEMENTS而不是Element。如果你有5个具有相同类名的元素,那么它返回索引为0,1,2,3,4,...的所有五个元素。如果你想获得一个元素,你应该去getElementById() – 2013-03-21 04:15:09

1

为什么不使用jquery方法?

var richTextEditor = document.getElementsByClassName("text-editor"); 

instead try this: 

var richTextEditor = $(".text-editor"); //again this is going to return more than one object. 

//so you can also try below code to manipulate in that. 

var richTextEditor = $(".text-editor").first(); //for first element. similarly can use .last() or n-th child. 
+0

你的建议是有意义的,但是我为这个编辑器使用了更多的'execCommands',所以给它的孩子不会帮助我。 – Manoj 2013-03-21 04:15:21

0

正如你使用jQuery,为什么不坚持使用jQuery。

var richTextEditor = $('.text-editor').eq(0); 

并且还的jQuery live方法已过时,使用.on()代替。

0

$(“。text-editor”)返回HTMl对象。 “document.getElementsByClassName(”text-editor“)”返回数组对象。

相关问题