Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 06.08.2014, 16:13
Интересующийся
Отправить личное сообщение для Mitrich Посмотреть профиль Найти все сообщения от Mitrich
 
Регистрация: 24.08.2013
Сообщений: 20

Попробую поковырять в этом направлении... Спасибо
Ответить с цитированием
  #12 (permalink)  
Старый 06.08.2014, 16:41
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

https://twitter.com/DmitryKorobkin/s...95877626855424
Ответить с цитированием
  #13 (permalink)  
Старый 07.08.2014, 15:53
Интересующийся
Отправить личное сообщение для Mitrich Посмотреть профиль Найти все сообщения от Mitrich
 
Регистрация: 24.08.2013
Сообщений: 20

Короче, трезво оценив свои силы, совершил акт вандализма по отношению к jQuery...

Заменил где нужно было toLowerCase() на нейтральный toString()...
Пока так... Мне же не шашечки... мне ехать...

PS. Нормальное решение ждёт своего героя...
Ответить с цитированием
  #14 (permalink)  
Старый 07.08.2014, 16:02
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

если есть метод toLowerCase, то это уже строка, строку в строку через toString преобразовывать бессмысленно

Я бы добавил в jQuery.attr проверку
elem.constructor.toString().indexOf('SVG') == 9 // 'function SVG...'

рядом с nType !== 1 и isXMLDoc

или там еще есть места, где арибуты в lowercase переделываются?
Ответить с цитированием
  #15 (permalink)  
Старый 07.08.2014, 16:23
Интересующийся
Отправить личное сообщение для Mitrich Посмотреть профиль Найти все сообщения от Mitrich
 
Регистрация: 24.08.2013
Сообщений: 20

toLowerCase() по коду более 40.
Мне хватило для своих целей пары исправлений (возможно хватило бы и одного, я вчера ночью уже запутался в своих экспериментах).

На toString заменил именно по тому, что это бессмысленно и ничего не делает в данном случае.

Проверка конечно намного более правильное решение, но всё равно нарушает аутентичность библиотеки... Эх... вот если бы патч какой сделать... Но пока видимо так придётся работать.
Ответить с цитированием
  #16 (permalink)  
Старый 07.08.2014, 18:01
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Все что нужно сделать для jQuery, что бы он не тупил с SVG
jQuery.extend({
  _originalAttr: jQuery.attr,
  attr: function(elem, name, value) {
    if (typeof SVGElement !== 'undefined' && elem instanceof SVGElement) {
      if (typeof value === 'undefined') {
        value = elem.getAttribute(name);
      } else if (value === null) {
        elem.removeAttribute(name);
      } else {
        elem.setAttribute(name, value + "");
      }
      return value;
    }
    return jQuery._originalAttr(elem, name, value);
  }
});

тест:
<!DOCTYPE html>
<html lang="en">
<head>
    <title>…</title>
    <meta charset="UTF-8">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</head>
<body>
    <script>
jQuery.extend({
  _originalAttr: jQuery.attr,
  attr: function(elem, name, value) {
    if (typeof SVGElement !== 'undefined' && elem instanceof SVGElement) {
      if (typeof value === 'undefined') {
        value = elem.getAttribute(name);
      } else if (value === null) {
        elem.removeAttribute(name);
      } else {
        elem.setAttribute(name, value + "");
      }
      return value;
    }
    return jQuery._originalAttr(elem, name, value);
  }
});



        var inlineSVG = '<svg baseProfile="full" WIDTH="300"  HEIGHT="200"><polygon points="100,10 40,198 190,78 10,78 160,198" style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;" /></svg>',
            tmpContainer = document.createElement('div'),
            svgElement;

        tmpContainer.innerHTML = inlineSVG;
        document.body.appendChild(tmpContainer.firstChild);
        tmpContainer = null;
        svgElement = jQuery('svg');
 
        alert([
            'baseprofile: ' + svgElement.attr('baseprofile'),
            'baseProfile: ' + svgElement.attr('baseProfile'),
            'width: ' + svgElement.attr('width'),
            'height: ' + svgElement.attr('height')
        ].join('\n'));
    </script>
 
</body>
</html>
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 08.08.2014 в 10:04. Причина: Исправил ошибочку :)
Ответить с цитированием
  #17 (permalink)  
Старый 08.08.2014, 21:34
Интересующийся
Отправить личное сообщение для Mitrich Посмотреть профиль Найти все сообщения от Mitrich
 
Регистрация: 24.08.2013
Сообщений: 20

То, что доктор прописал... Работает... Спасибо.

ЗЫ: У меня правда всплыли ещё проблемы, но это уже другая песня...
Ответить с цитированием
  #18 (permalink)  
Старый 09.08.2014, 11:04
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 19.01.2010
Сообщений: 354

Я вот, кстати, не пойму: как так получилось, что я ни разу не сталкивался с такой проблемой? Как эта проблема решается в svg-фреймворках?
Ответить с цитированием
  #19 (permalink)  
Старый 09.08.2014, 13:13
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от ixth
Как эта проблема решается в svg-фреймворках?
тем что не используют jQuery
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #20 (permalink)  
Старый 10.08.2014, 00:43
Интересующийся
Отправить личное сообщение для Mitrich Посмотреть профиль Найти все сообщения от Mitrich
 
Регистрация: 24.08.2013
Сообщений: 20

Ето да...
Я тож раньше обходил тем что просто нативный js использовал...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как при щелчке прибавить значение cookies на единицу. Peter23 Общие вопросы Javascript 6 23.02.2013 13:14
Скролл контента при помощи Drag&Drop, как прокрутка в Google Maps Deprime Элементы интерфейса 1 24.12.2012 15:47
Как отследить пропал ли текст placeholder-а при фокусе на поле ввода z1987 Общие вопросы Javascript 2 19.12.2012 11:10
Как при чтении или записи свойства объекта вызывать функцию danik.js Общие вопросы Javascript 3 16.09.2010 17:57
Подскажите как при помощи JS hta в трею свернуть kimboo Общие вопросы Javascript 4 11.07.2008 16:00