Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   обработка атрибута href (https://javascript.ru/forum/misc/54705-obrabotka-atributa-href.html)

Dark Surv 28.03.2015 21:39

обработка атрибута href
 
Всем привет! :victory:
Припустим есть такой html-файл:
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js" ></script>
  <script type="text/javascript">
        $(document).ready(function() {
            $('a').click(function() {
                var url = $(this).attr('href');
				alert (url);
				return false;
            });
        });
  </script>
<a href="http://test.tk/file.php">http://test.tk/file.php</a><br>
<a href="//test.tk/file.php">//test.tk/file.php</a><br>
<a href="/file.php">/file.php</a><br>
<a href="file.php">file.php</a>

Как сделать(а точнее обработать) чтобы каждый алерт выдал просто file.php :)

Decode 28.03.2015 22:55

Например, так:
$(document).ready(function() {
    $('a').click(function() {
        var url = /file.php/.exec( $(this).attr('href') );
        alert(url);
        return false;
    });
});

jsnb 29.03.2015 04:58

Цитата:

Сообщение от Decode (Сообщение 363707)
Например, так:
$(document).ready(function() {
    $('a').click(function() {
        var url = /file.php/.exec( $(this).attr('href') );
        alert(url);
        return false;
    });
});

А в чем смысл такой регулярки? С таким же успехом можно в алерте просто строку 'file.php' выводить. Я думаю, что автору нужно получить название файла из пути. Проще всего разбить строку по слешам в массив:
$(document).ready(function() {
    $('a').click(function() {
        var url = $(this).attr('href'),
            arr = url.split('/'),
            fileName = arr[arr.length-1];
        alert(fileName);
        return false;
    });
});

Ну и если надо, то дополнительно проверять fileName на соответствие нужному шаблону.

Dark Surv 29.03.2015 10:32

Цитата:

Сообщение от jsnb
Я думаю, что автору нужно получить название файла из пути

я делаю хеш навигацию(это костыль для осла, основное изменение истории происходит history.pushState), и мне нужны адреса типа
http://test.tk/#/file.php
или
http://test.tk/file.php#/file.php

и я изменяю хеши так
$(document).ready(function() {
            $('a').click(function() {
                var url = $(this).attr('href');
		            window.location.hash = "/" + url;
                return false;
            });
        });

теперь поменяйте этот кусок javascript на кусок в первом примере

Dark Surv 29.03.2015 10:39

в это примере
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js" ></script>
<script type="text/javascript">
        $(document).ready(function() {
            $('a').click(function() {
                var url = $(this).attr('href');
			    window.location.hash = "/" + url;
                return false;
            });
        });
  </script>

<a href="http://test.tk/file.php">http://test.tk/file.php</a><br>
<a href="//test.tk/file.php">//test.tk/file.php</a><br>
<a href="/file.php">/file.php</a><br>
<a href="file.php">file.php</a>

ссылки будут
http://test.tk/file.html#/http://test.tk/file.php
http://test.tk/file.html#///test.tk/file.php
http://test.tk/file.html#//file.php
http://test.tk/file.html#/file.php

а мне нужно что бы все были
http://test.tk/file.html#/file.php

вот как :)
проще было бы использовать HTML5 History API то Devote но я велосипедист :thanks:

Dark Surv 29.03.2015 10:50

Цитата:

Сообщение от jsnb
arr = url.split('/'),

ошибка
Uncaught TypeError: Object [object Array] has no method 'split'

я тоже пробовал через split, что-то никак

jsnb 29.03.2015 10:58

Цитата:

Сообщение от Dark Surv
ошибка
Uncaught TypeError: Object [object Array] has no method 'split'

Я там исправил код в моем посте. Теперь должно работать.

Dark Surv 29.03.2015 11:04

Цитата:

Сообщение от jsnb
Теперь должно работать

спасибо большое, теперь можно как-то бороться с ослом =D

Dark Surv 29.03.2015 13:09

Общем я криво задал задачу и не полностью получил ответ
мне нужно не имя файла, а все что после первого слеша
http://test.tk/test/file.php = test/file.php или /test/file.php

а получается
http://test.tk/test/file.php = file.php

помогите мне еще раз пожалуйста :help:

jsnb 29.03.2015 13:35

Ну тогда используй pathname:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">

</head>
<body>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js" ></script>
<script type="text/javascript">
$(document).ready(function() {
  $('a').click(function() {
    alert(this.pathname);
    return false;
  });
});
</script>

<a href="http://test.tk/test/file.php">http://test.tk/test/file.php</a><br>
<a href="//test.tk/some/path/file.php">//test.tk/some/path/file.php</a><br>
<a href="test/file.php">test/file.php</a><br>
<a href="file.php">file.php</a>


</body>
</html>


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