2016-12-29 6 views
3

をクリックして、私は私が私のブートストラップモーダルを開くと、それは私が新しい基準を作成することができますCodeIgniterの & jQueryのparsedown /マークダウンを使用していますここのようなスタイルのリンク。保存でテキストエリアの設定次Avaibaleつのハイパーリンクのための既存の番号を見つけ/モーダル

私は自分のテキストエリアで利用可能な次の空き番号をどこで見つけることができるようにしようとしています。モデルの保存をクリックすると設定されます。

I am fine [exmple-1][1] and [example-3][3] 

[1]: http://www.example.com 
[3]: http://www.example.com 

そして、私は私のブートストラップモーダルを開き、新しいハイパーリンクを作成するときには、ここで次の使用可能な数

を設定し、追加しますCodepen Example

質問です:どのように私ができますブートストラップモーダル に新しいハイパーリンクを作成し、[保存]をクリックすると、次に使用可能な番号が設定されています。唯一の1 & 3が2である必要があり、次のいずれか上記の例で設定されているので、私はただの数字を作成できるようにvar counter = 1;counter++;を使うの下にあなたが見ることができるよう

現在のモデルを中に保存する]をクリックしたとき。

スクリプト:

$('#myLink').on('shown.bs.modal', function() { 
    var text = getSelectedText(); 
    $('#title').val(text.trim()); 
    $('#url').val('http://'); 
});  

function getSelectedText() { 
    var textarea = document.getElementById("message"); 
    var len = textarea.value.length; 
    var start = textarea.selectionStart; 
    var end = textarea.selectionEnd; 
    var sel = textarea.value.substring(start, end); 
    return sel; 
} 

var counter = 1; 

$('#save-link').on('click', function(e) { 
    var textarea = document.getElementById("message"); 
    var len = textarea.value.length; 
    var start = textarea.selectionStart; 
    var end = textarea.selectionEnd; 
    var sel = textarea.value.substring(start, end); 

    var replace = '[' + $('input#title').val() + ']' + '[' + counter + ']'; 

    var id = '\n [' + counter + ']: ' + $('input#url').val(); 

    counter++; 

    if ($('#title').val().length > 0) { 
     textarea.value = textarea.value.substring(0,start) + replace + 
     textarea.value.substring(end,len) + ' \n' + id; 
     $('#myLink').modal('hide'); 
     //$('#myLink form')[0].reset(); 
    } else { 

     return false; 
    } 
}); 
+0

counter++;を置き換えますか?あなたは単にチェックせずに 'counter'を使います。 – Barmar

+0

はい、ちょうどvarカウンタを使用しています – user4419336

+0

私はここでjavascriptの例外が表示されます:$( '#myLink form')[0] .reset(); – yts

答えて

0

としてBarmar言った:オブジェクトまたは配列にごすでに生成された数値を格納し、次の非既存の番号を確認してください:

var existingNumbers = [1, 3]; 

function getNextNumber() { 
    var i = 1; 

    while (existingNumbers.indexOf(i) > - 1) { 
     i++; 
    } 

    existingNumbers.push(i); 
    return i; 
} 

は、その後、次の番号を取得しますwith:

var number = getNextNumber(); 
+0

スクリプトの中でどのように動作させるのですか? – user4419336

+0

http://codepen.io/anon/pen/BQXMpJ – pixelarbeit

+0

保存をクリックすると、ショー番号4は1から始まるはずです。この 'var existingNumbers = [1,3];' – user4419336

3

単純な正規表現を使用して、テキストエリアで使用された数字を見つけることができます。

function findAvailableNumber(textarea){ 
    //Find lines with links 
    var matches = textarea.value.match(/(^|\n)\s*\[\d+\]:/g); 

    //Find corresponding numbers 
    var usedNumbers = matches.map(function(match){ 
     return parseInt(match.match(/\d+/)[0]); } 
    ); 

    //Find first unused number 
    var number = 1; 
    while(true){ 
     if(usedNumbers.indexOf(number) === -1){ 
      //Found unused number 
      return number; 
     } 

     number++; 
    } 

    return number; 
} 

、機能を追加ラインvar counter = 1;を削除し、var counter = findAvailableNumber(textarea);あなたは番号が利用可能であるかどうかをチェックしますか

JSFiddle

+0

実例がありますか – user4419336

+0

あなたの言ったことをしましたが一致するものは – user4419336

+0

私は働いているJSFiddleを追加しました – Borre

関連する問題