Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Автоматический вывод иконки (https://javascript.ru/forum/dom-window/11802-avtomaticheskijj-vyvod-ikonki.html)

artwalek 14.09.2010 14:06

Автоматический вывод иконки
 
Привет.
Нужна ваша помощь в регулярке.

Нужно после ссылки, которая если содержит один из трёх видов расширений выводилась иконка.

Пробую делать так:
<script type="text/javascript">
	function replace() {
		var url = (/\.(\w+)($|#|\?)/i); 
		var text = 'Тест /Staff/Common/HTMI/docs/cennosti.ppt';
		var result = text.match(url);
		if (result != null) {
			var fullurl = result[1];
			if (fullurl == "doc") {
				document.getElementById('t').innerHTML = text + "<img src='/info/images/word.gif'>";
			}
			else if (fullurl == "ppt") {
				document.getElementById('t').innerHTML = text + "<img src='/info/images/ppoint.gif'>";
			}
			else if (fullurl == "xls") {
				document.getElementById('t').innerHTML = text + "<img src='/info/images/excel.gif'>";
			}
			else {
				document.getElementById('t').innerHTML = text;
			}
		}
	}
</script>


Вроде всё в порядке, но стоит входным данным измениться например на
var text = '<p>Тест <a href="/Staff/Common/HTMI/docs/cennosti.ppt">/Staff/Common/HTMI/docs/cennosti.ppt</a> тут что-то ещё</p>';
скрипт не работает.

Помогите пожалуйста.
Спасибо.

exec 14.09.2010 14:15

<script type="text/javascript">
	function replace() {
		var text = '<a href="/load-3457823758">example.rar</a>',
		result = text.match( /\.(rar|exe|mp3)/ );
		if ( result != null ) {
			document.getElementById( 't' ).innerHTML = text + '<img src="/icons' + result[1] + '.png" />';
		}
	}
</script>


/.(rar|exe|mp3)/ — здесь пишите через | список форматов.

В папку icons залить изображения с именами, соответствующими формату файла, например, rar.png

artwalek 14.09.2010 15:46

exec, спасибо, а как сделать чтобы после ссылки была иконка? В данной реализации иконка будет после основного текста.

exec 14.09.2010 17:24

target.parentNode.insertBefore( element, target.nextSibling );


target — после какого элемента ставить, element — элемент для вставки.

Полный код не могу привести, т.к. непонятно, после какой ссылки вставлять.

artwalek 15.09.2010 11:12

К примеру вот такая строка
var text = '<p>Тест <a href="/Staff/Common/HTMI/docs/cennosti.ppt">ссылка<a/> здесь что-то еще будет</p>';


Соответственно сразу после ссылки /Staff/Common/HTMI/docs/cennosti.ppt нужно вставить иконку ppt.gif

exec 15.09.2010 12:15

Нужен DOM-элемент, а не строка.

artwalek 15.09.2010 14:20

Делаю в xsl:
<msxsl:script
    language="JavaScript"
    implements-prefix="ext">

<![CDATA[
	function matchurl(text) {
		var txt = text[0].text.substr(0);
		result = txt.match(/\.(doc|ppt|xls)/);
		if (result != null) {  
			return txt + '<img src="/Info/images/' + result[1] + '.gif" />';
		}
		else {
			return txt;
		}
	}
]]>
</msxsl:script>


Вызываю:
<p style="clear: both;"><xsl:value-of select="ext:matchurl(rss/channel/item/text)" disable-output-escaping="yes" /></p>


В узле text содержится примерно та строка, которую привёл ранее.


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