يمكنني تحديث window.location.hash دون الحاجة التمرير صفحة على شبكة الإنترنت؟

StackOverflow https://stackoverflow.com/questions/645202

سؤال

<ع> استخدام جافا سكريبت، هل هناك طريقة لتحديث window.location.hash دون التمرير صفحة الويب؟

ولدي عناصر لقب نقر أن تبديل الرؤية لشعبة مباشرة تحتها. أريد / فو # شريط في التاريخ عند النقر على عناوين ولكن لا نريد التمرير صفحة حول. لذلك عندما تبحر بعيدا عن / فو # شريط سأكون قادرا على استخدام الزر مرة أخرى ولها شعبة الذي ID في window.location.hash تكون مرئية عند عودتهم.

هل هذا السلوك ممكن؟

هل كانت مفيدة؟

المحلول

وهذا السلوك ممكنا إلى حد كبير. يجب أن ننظر إلى بعض المكتبات التي تم تطويرها لتعطيك هذه الوظيفة.

والتاريخ بسيط حقا: http://code.google.com/p/reallysimplehistory/ SWFAddress: http://www.asual.com/swfaddress/

نصائح أخرى

لتغيير تجزئة دون الحاجة الصفحة تحديث / التمرير، يمكنك الآن ببساطة استخدام HTML5 history.pushState.

history.pushState(null,null,'#hashexample');

ولقد مدعومة من قبل جميع المتصفحات الرئيسية:

http://caniuse.com/history

وMDN:

الشبكي: //developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history#The_pushState().C2.A0method

لاحظ أيضا أن رابط المعلمة الأخيرة نستخدمه هنا، يمكن أن يكون أي رابط، لذلك لا يقتصر على التجزئة.

وسهلا كما هو الحصول على

var scrollmem = $('html,body').scrollTop();
window.location.hash = hash;
$('html,body').scrollTop(scrollmem);

وآخر شيء يمكن أن تحاول يتغير هوية العنصر النقاط التجزئة لمؤقتا. عملت بالنسبة لي!

function changeHashWithoutScrolling(hash) {
  var id = hash.replace(/^.*#/, ''),
      elem = document.getElementById(id)
  elem.id = id+'-tmp'
  window.location.hash = hash
  elem.id = id
}

مطلوب لإضافة تعليق على كاثرين الجواب ولكن ليس لدي مندوب بعد -

.

وعظيم حل إلا أنها لا تعمل بالنسبة لي في كروم من $ ( 'أتش تي أم أل') scrollTop () دوما بإرجاع 0 - وهو تغيير طفيف على حل المشكلة:

scrollmem = $('html').scrollTop() || $('body').scrollTop();
window.location.hash = hash;
$('html,body').scrollTop(scrollmem);

وباس على الاجابة من مشمس أدليت به هذه الوظيفة أن يتجنب أيضا غير معروف وبلا قيم:

    function changeHashWithoutScrolling(hash) {
        var id;
        var elem;

        id = hash.replace(/^.*#/, '');

        if (id) {
            elem = document.getElementById(id);

            if (elem) {
                elem.id = id + '-tmp';
                window.location.hash = hash;
                elem.id = id;
            }
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top