2011-10-10 3 views
1

Есть ли способ написать следующий код, работающий с innerHTML в компактном независимом от платформы способе (возможно, используя jquery)?Селекторы через jquery

Дело в том, что теги IE имен в разных случаях в innerHTML, поэтому мне нужно два аргумента if, чтобы справиться с этим. toLowerCase не помогает, когда дело доходит до цитат.

var flagpos = html.indexOf('</a>') 
if (flagpos == -1) flagpos = html.indexOf('</A>') 

html = (flagpos >= 0) ? 
    '<span class="' + html.substr(flagpos + 4). 
    replace(/^\s*|\s*$/, ''). 
    replace(/ /g, '"></span><span class="') + 
    '"></span>' + res + ' ' + html.substr(0, flagpos + 4) : res + ' ' + html 

- или -

if (!toggleFlags[j] || 
    child.innerHTML.indexOf('<span class="' + j + '">') >= 0 || 
    child.innerHTML.indexOf('<SPAN class=' + j + '>') >= 0) continue 

ответ

0

Просто используйте

var whoCares = child.innerHTML.toUpperCase(); 

Тогда вы всегда можете сравнить с ВЕРХНИМИ именами СЛУЧАЯ тегов. (Или используйте вместо этого .toLowerCase().) Конечно, это преобразует все алфавитные символы в верхний регистр (или в нижнем регистре, в зависимости от ситуации), так что вам нужно будет сделать:

if (!toggleFlags[j] || child.innerHTML.toUpperCase().indexOf('<SPAN CLASS=' + j.toUpperCase() + '>')) 

Еще один совершенно другой подход не искать элементы через сырье (или, вернее, воссоздать) HTML, и использовать селектор (который, возможно, был смысл вашего вопроса :-):

if (!toggleFlags[j] || child.find('span.' + j).length > 0) { 
    // whatever 
} 
1

Вы можете использовать String.search() вместо String.indexOf(), чтобы сделать ваши шаблоны нечувствительными к регистру (поскольку вам не требуется смещение): var flagpos = html.search(/<\/a>/i);

Что мешает вам делать $html = $(html); и использовать API-интерфейс JQuery Traversing API?

Смежные вопросы