Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как получить значение после диеза # ?
 
 автор: Киналь   (10.12.2005 в 11:22)   письмо автору
 
 

Как можно, обратившись к скрипту примерно так: "script.php#34" получить вот это самое 34? $_SERVER проверял, не подходит=)

   
 
 автор: Akira   (10.12.2005 в 11:48)   письмо автору
 
   для: Киналь   (10.12.2005 в 11:22)
 

Только через JS.

   
 
 автор: Киналь   (10.12.2005 в 15:21)   письмо автору
 
   для: Akira   (10.12.2005 в 11:48)
 

Жаль... А как через JS?

   
 
 автор: Ressfourt   (10.12.2005 в 17:21)   письмо автору
 
   для: Киналь   (10.12.2005 в 15:21)
 

а зачем использовать JS так можно же script.php?num=34
и потом через $_GET этот нум и получать

   
 
 автор: Киналь   (10.12.2005 в 18:31)   письмо автору
 
   для: Ressfourt   (10.12.2005 в 17:21)
 

Хм... Честно говоря, думал, спросит кто-нибудь об этом или нет... Спросили.
Весь смысл в том, чтобы именно таким образом. Тогда произойдет прокрутка страницы до якоря <a id=34>, и параллельно с этим можно было бы как-то обработать (выделить) элемент, соответствующий этому якорю. С помощью get можно выполнить только вторую часть задачи.

   
 
 автор: Vlad Macurov   (11.12.2005 в 05:32)   письмо автору
 
   для: Киналь   (10.12.2005 в 18:31)
 

а если так script.php?num=34#34
;)

   
 
 автор: Киналь   (11.12.2005 в 10:04)   письмо автору
 
   для: Vlad Macurov   (11.12.2005 в 05:32)
 

Неэлегантно
=)

Так как же с помощью JS?

   
 
 автор: 12345   (11.12.2005 в 15:11)   письмо автору
 
   для: Киналь   (11.12.2005 в 10:04)
 

<a href=script.php#34
onclick=t=this.href;ti=t.indexOf('#');ta=t.substring(ti+1);tp="?num=";if(t.indexOf(tp)<0)this.href=t.substring(0,ti)+tp+ta+"#"+ta;return!1>
клик</a>

Если убрать return!1, скрипт пойдёт на выполнение, результат перейдёт по якорю. Если не убирать, при (повторном для FF) наведении мыши в статус-строке видим результат.
Если надо вынести функцию в обработчик прерывания, чтобы каждый раз не писать, присваиваем тегу "а" класс, чтобы выполнять эти действия при обнаружении его в обработчике.

<script>d=document;FF=navigator.appName=="Netscape"; /*isGecko*/
d.onclick=function(e){if(!e)e=event;t=FF?e.target:e.srcElement;
if(t.tagName=='A'&&t.className=='anch'){
    th=t.href;ti=th.indexOf('#');ta=th.substring(ti+1);tp="?num=";
    if(th.indexOf(tp)<0)t.href=th.substring(0,ti)+tp+ta+"#"+ta;
    if(FF)e.preventDefault();else e.returnValue=!1;
}}
</script>
<a href=script.php#34 class=anch>клик</a><br>
<a href="javascript:document.write('normal link');">простая ссылка</a>
Здесь, чтобы ссылки с классом anch заработали, убираем if(FF)e.preventDefault();else e.returnValue=!1; .

   
 
 автор: Киналь   (11.12.2005 в 17:23)   письмо автору
 
   для: 12345   (11.12.2005 в 15:11)
 

>
&lt;a href=script.php#34
>onclick=t=this.href;ti=t.indexOf('#');ta=t.substring(ti+1);tp=&quot;?num=&quot;;if(t.indexOf(tp)&lt;0)this.href=t.substring(0,ti)+tp+ta+&quot;#&quot;+ta;return!1&gt;
>клик&lt;/a&gt;

Кажется, это то, что нужно; только что написать вместо this.href, чтобы получить нужное число из url'а? Прошу прощения, если глупость спрашиваю.

   
 
 автор: 12345   (11.12.2005 в 20:48)   письмо автору
 
   для: Киналь   (11.12.2005 в 17:23)
 

this.href - это обращение к атрибуту href=script.php#34
t.substring(ti+1); - это взятие нужного числа (ti=t.indexOf('#'); t=this.href; )

   
 
 автор: Киналь   (11.12.2005 в 22:23)   письмо автору
 
   для: 12345   (11.12.2005 в 20:48)
 

Да нет, это я все понял. Вопрос в другом - мне ведь нужно получать не из атрибута href, а из строки адреса. То есть в самом script.php, а не в ссылке на него.

   
 
 автор: 12345   (12.12.2005 в 03:32)   письмо автору
 
   для: Киналь   (11.12.2005 в 22:23)
 

Т.е. после вызова уже.
Это достаётся JS-ом по location.toString() или self.location.toString() .
В результате,
location.toString().substring(location.toString().indexOf('#')+1) ,если точно известно, что # там есть.

Или нет? Вопрос же в том, как получить это "34" на сервере? тогда верен прежний пример. Ставите ссылку такую, чтобы там параметр продублировался в специальной переменной, и только таким образом получаете на сервере num=34 . Так что нужно именно ссылку модифицировать, как советовали. Якорь остаётся у клиента, сервер о нём не знает.


Есть ещё фокус - сделать переход на текущей странице на страницу с параметром после ?, например, page.htm?v=34 . Правда, будет перезагрузка. Потом, после вызова script.php, достать этот параметр по $_SERVER['HTTP_REFERER']

   
 
 автор: Киналь   (12.12.2005 в 19:21)   письмо автору
 
   для: 12345   (12.12.2005 в 03:32)
 

[bl]ocation.toString().substring(location.toString().indexOf('#')+1)[/b]
То что надо! Буду думать дальше, как элементу с полученным id класс поменять; но это уж как-нибудь соображу.

Только один вопрос. Что будет, если диеза в адресе нет? Ну там ручки у кого-нибудь шаловливые оказались. Есть что-нибудь типа if (strpos($url, "#") == 0)?

   
 
 автор: 12345   (13.12.2005 в 06:12)   письмо автору
 
   для: Киналь   (12.12.2005 в 19:21)
 

Результат будет - весь урл, т.к. результат indexOf = (-1).

   
 
 автор: Киналь   (13.12.2005 в 17:36)   письмо автору
 
   для: 12345   (13.12.2005 в 06:12)
 

О, спасибо. Буду пробовать.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования