Привет всем!

Есть некая задача на js, в этой задаче надо уменьшить количество символов до определенного количества в неком теге «a».

Есть цикл, который говорит чтото типа a.innerHTML = a.innerHTML.substr(0, a.innerHTML.length — 3); потом проверяет всякие там условия — успокоится или продолжить. Все вроде хорошо работает, но тут я замечаю одну странность, на некоторых innerHTML’aх он уходит в бесконечный цикл. Начинаю копать и вот что обнаруживаю.

Если в innerHTML есть некий спецсимвол, для простоты пусть будет «—» и при substr от него остается пусть даже «&mdas», то браузеры каким то шестым чуством восстанавливают его до полного «—». И соответственно все уходит в бесконечный цикл. Если включить проверку при каждой итерации на содержании вконце обрезанного спецсимвола, то тот же ie8 нехило задумывается об этом на секунды 4-5 суммарно. Можно конечно копать в сторону сокращений итераций, и нужно, но хотелось бы сначала разобраться с этим.

Кто нить сталкивался с такой штукой?

Tagged with →  

12 Responses to Задача на js

  1. 05tGood:

    «—», это конечно же —

    что самое смешное ie не подвержено данной фигне.

  2. OHASpb:

    Просто не используй innerHTML, замени на textContent/innerText или что там сейчас модно у современных браузеров.

  3. ResSm:

    А зачем вообще итерации нужны? Почему нельзя просто обрезать до скольки там тебе надо?

  4. UpaFcuk:

    Ну да, и нехуй ваще аббревиатуры резать.

  5. UpaFcuk:

    Или вынеси в отдельную переменную, а потом режь.

  6. 05tGood:

    там идет ужимание строки до того момента пока она не станет помещаться в определенную область, поэтому и используется innerHTML, так бы конечно это было бы переменно1

  7. 05tGood:

    Вот этот зоопарк мне не нравится, innerHTML хоть везде есть

  8. OHASpb:

    Тебе шашечки или ехать?

  9. UpaFcuk:

    тогда каждый раз надо делать entity decode. Спроси у яндекса «html_entity_decode.js»

  10. Xuagreen:

    хватит сделать один раз и потом уже работать с декодированной строкой. И это правильное решение.

  11. Vormo:

    Работай не с innerHTML, а с текстовыми нодами.

  12. UPnPhone:

    > там идет ужимание строки до того момента пока она не станет помещаться в определенную область,

    А не пытаешься ли ты случайно с помощью индусского тормозящего кода реализовать жалкое подобие overflow:hidden?

Добавить комментарий