Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Написание плагина (https://javascript.ru/forum/jquery/47022-napisanie-plagina.html)

NapalmRain 05.05.2014 15:44

Написание плагина
 
Доброго всем времени суток.

Пишу плагин для выделения синтаксиса листингов на сайте.
На странице есть элемент
<code type=javascript> // тут код</code>
<code type=php> // тут код</code>

В скрипте:
$('[type=php]').itcode('php');
$('[type=javascript]').itcode('javascript');

и в самом плагине:
$.fn.itcode = function(language) {
		switch (language) {
			case 'php':
				init($(this), phpWords);
				break;
			case 'delphi':
				init($(this), delphiWords);
				break;
			case 'javascript':
				init($(this), javascriptWords);
				break;
			case 'java': break;
			case 'code': break;
			case 'c#': break;
	}
  };

метод init
var init = function (object, arrayOfWords) {
		var words = [];
		for (var k in arrayOfWords) {
			words[arrayOfWords[k]] = arrayOfWords[k];
		}
		if (object.html()!==null) {
			var include = object.html();
			var lines = include.split('\n');
		}
	}

Ну и дальше уже работа со строками.

Всё работает хорошо, когда на странице только один элемент с тегом code, или несколько но с разными типами.
Но если в тексте встречается
<code type=javascript> // тут код</code>
плагин почему-то выбирает содержимое object.html(); из первого встречающегося на странице.
Прошу подсказки, в чём причина данной ситуации и как её решить?

Заранее благодарю!

devote 05.05.2014 15:56

$.fn.itcode = function(language) {
  return this.each(function() {
    switch (language) {
      case 'php':
        init($(this), phpWords);
        break;
      case 'delphi':
        init($(this), delphiWords);
        break;
      case 'javascript':
        init($(this), javascriptWords);
        break;
      case 'java': break;
      case 'code': break;
      case 'c#': break;
    }
  });
};

NapalmRain 05.05.2014 16:25

devote, благодарю за совет! Всё прекрасно.
Я так понял, проблема состояла в том, что при вызове плагина в this уже содержался массив объектов, а не каждый объект вызывал плагин для себя?


Часовой пояс GMT +3, время: 20:36.