2013-04-12 3 views
0

Я пытаюсь заменить первые 5 букв во всех ссылках на этой странице, которые содержат #OFN# в первых 5 буквах ссылки с изображением для замены #OFN# текста, но хотят сохранить остальная часть текста ссылки.jQuery - Замена частичного текста внутри ссылки

Вот что я использую до сих пор ...

$(document).ready(function() { 
    $("a:contains('#OFN#')").each(function() { 
     var calSubject = $(this).text().substring(5); 
     $(this).replaceWith("<img src='/images/ofn_bullet.gif' width='10' height='10' style='width: 10px; height: 10px; border: none;' />" + calSubject); 
    }); 
}); 

Но этот подход устраняет <a> tag полностью из текста. Как я могу это сделать, не снимая <a> tags

Вот пример HTML звена:

<a href="#" onclick="eventDisplay('980','4/18/2013')">#OFN# 2013 Midwest Regional Meeting</a> 

Я попытался с помощью .children() но это, кажется, не работает. Что я здесь делаю неправильно?

+0

$ (this) .replace С этой строкой вы заменяете тэг anchor вместо того, чтобы заменить текст() тега привязки. – rahularyansharma

+0

Спасибо, да, я полностью выбрал не того. –

ответ

0

Выберите текстовые узлы и обновить их вместо этого. jsFiddle Demo

$(document).ready(function() { 
    $("a:contains('#OFN#')").contents().each(function(){ 
     // skip if not a text node 
     if (this.nodeType != 3) { 
      return true; 
     } 
     this.nodeValue = this.nodeValue.substr(5); 
     $(this).before("<img src='/images/ofn_bullet.gif' width='10' height='10' style='width: 10px; height: 10px; border: none;' />"); 
    }); 
}); 
+0

Спасибо, ты подход был лучшим, ИМО. Потрясающие! –

0

использование html вместо replaceWith. Проверьте эту скрипку:

http://jsfiddle.net/lbstr/MPTp7/

replaceWith заменит элемент, который он вызывается на, что объясняет поведение, которое вы описали. Используя $.fn.html, вы заменяете все внутри анкера.

0

Используйте метод html поместить код внутри ссылки вместо того, чтобы заменить его:

$(this).html("<img src='/images/ofn_bullet.gif' width='10' height='10' style='width: 10px; height: 10px; border: none;' />" + calSubject); 
+0

yep, просто изменил его на это и BAM! ИДЕАЛЬНО! –

0

Я хотел бы сделать что-то немного более многословный:

var regex = /^#0FN#/; 
$("a").each(function() { 
    var $this = $(this), html = $this.html(); 
    if (regex.test(html)) { 
     html.replace(/#0FN#/, "image stuff"); 
     $this.html(html); 
    } 
}); 
0

Это выглядит понятнее мне:

<a href="#" class="ofn" onclick="eventDisplay('980','4/18/2013')"> 
    <span>2013 Midwest Regional Meeting</span> 
</a> 

И

$(document).ready(function() { 
    $('a.ofn').prepend('<img class="icon" src="/images/ofn_bullet.gif" />'); 
}); 

И

a.ofn .icon { 
    width: 10px; 
    height: 10px; 
    border: none; /* Actually i think you mean outline rather than border */ 
} 

Если вы не должны делать это так, как вы это делаете по каким-то причинам вы не Ell нам о.

Вы также можете переместить onlick из тега в javascript, если параметры eventDisplay всегда совпадают.

+0

Я думал, что вы используете 'border' для изображений, а не' outline' –

+0

Если ваша цель - удалить синюю рамку вокруг изображения, тогда я думаю, что это контур, а не граница. Хотя на 100% уверен, хотя долгое время я этого не делал. – Virus721