2012-01-26 205 views
1

我需要一些幫助,可以將電話號碼轉換爲tel:links?將電話號碼轉換爲電話號碼的JavaScript:鏈接

我需要這段代碼的一些事情:1)只在文本中查找數字,找不到位於標籤屬性中的數字。 2)一旦找到號碼,將其包裹在tel:anchor中。 3)清理href屬性的編號(刪除任何不是數字的東西)。 4)希望工作速度非常快:)

使用jQuery很好,但我不確定這是否是最好的方法。

所以的JavaScript將改變的東西的頁面這樣所有實例:

<div data-something-that-looks-like-phone-number="(111) 222-3333"></div> 
(000) 000-0000 

要這樣:

<div data-something-that-looks-like-phone-number="(111) 222-3333"></div> 
<a href="tel:0000000000"> (000) 000-0000</a> 

你會發現數據的東西,也就是說,看起來,喜歡 - 電話號碼屬性沒有改變。

我有,似乎也用於搜索電話號碼

[01]?[- .]?[\(\. ]?[2-9]\d{2}[\)\. ]?[- .]?\d{3}[- .]\d{4} 

讓我開始將是非常讚賞的任何代碼工作正則表達式。謝謝!

此外,之前也有類似的問題,解決方案是「不用擔心,因爲手機會自動執行此操作。」該解決方案對我們不起作用,即使在不自動執行此操作的設備上也需要電話鏈接。再次感謝......

回答

1

我不明白爲什麼你需要一個正則表達式,如果你有數據屬性:

$("div[data-number]").each(function() { 
    var $a = $("<a />").attr("href", "tel:" + $(this).data("number")); 
    $a.html($(this).html()); 
    $(this).html($a); 
}); 

Demo.

+0

感謝您的代碼,但是我只是編寫了數據屬性來顯示我不想改變的一個例子(事後的一個不好的例子)。如果你在整個頁面源代碼中運行正則表達式,你會發現數據屬性中的數字,但不應該改變......數據屬性不會在實際使用中出現,但類似的數字可能在某處的標籤中並應該留下... – MCM

+0

我編輯了這個問題,使我使用數據屬性更清晰。 – MCM

0

我認爲你正在尋找這樣的事情。

var phoneRegEX = /([01]?[- .]?[\(\. ]?[2-9]\d{2}[\)\. ]?[- .]?\d{3}[- .]\d{4})/; 

$("div[data-number]").html(function(i, text) { 
    text = text.replace(phoneRegEX, "<a href='tel://$1'>$1</a>"); 
    return text; 
}); 

但是您正則表達式似乎有點有限

0

很老,但我會遇到這樣的今天,找不到任何有效的解決辦法,所以我寫了這個正則表達式並將其添加爲書籤按鈕。它弄亂了頁面(css /圖像),但允許您單擊要撥打的號碼。

javascript:document.body.innerHTML = document.body.innerHTML.replace(/((\d[\d\-.]*){9,})/g, '<a href="tel://$1">$1</a>'); 

它將匹配至少9個字符的數字。或者 -


我必須澄清,它只是想幫你在一些點擊撥號,它不是一個完美的解決方案。

******更新******

OK,睡不着覺所以我創建的東西要好得多。現在你只需要點擊它將轉到電話鏈接的數字,然後像通常那樣點擊它。

javascript:document.addEventListener('click', function(e) { e = e || window.event; var target = e.target || e.srcElement; target.innerHTML = target.innerHTML.replace(/(([\d|\(][\d\-.\)\s]*){9,})/g, '<a _was_replaced="true" href="tel://$1">$1</a>'); if (!target.getAttribute("_was_replaced")) { e.preventDefault(); } }, true);