0

すべての日時値を検索したいページがあります。

すべての日時値を見つけて、それらをイスラム教の日時から標準の日時に変換したいと考えています。

javascriptでdatetime値を見つけて変更するにはどうすればよいですか?

例えば:

このコードをhtmlで欲しい

<td class="ms-vb2"><nobr>18/02/1391 14:07</nobr></td>

日時の値 (18/02/1391 14:07) を見つけて、javascript で (14/08/2012 10:15) に変更します。

編集

このコードを使用して、すべての日付値を見つけます

var re =  /[0-3]\d\/[01]\d\/\d{4}/g;
var dates = $("body").text().match(re);

新しい日付に置き換える方法???

4

3 に答える 3

0

DOM の仕組みにより、datetime 値を特定のタグ (おそらく特定のクラス名) でラップすることをお勧めします。の代わりに<nobr>08/02/1391 14:07</nobr>、 を使用できます<span class="datetime">8/02/1391 14:07</span>。これにより、DOM を使用して日時でタグを識別できるため、日付を簡単に見つけることができます。

jQueryのセレクターを使用して値を取得できます....

$('.datetime').html()

...またはバニラ Javascript を使用することもできます。

document.getElementsByClassName('datetime')

これは、すべての日時を見つけるための最初のステップです。その後、日時ごとsplit()に、区切り文字に基づいて文字列を配列に分割する関数を呼び出して、使用可能な形式に変換する必要があります。デフォルトの区切り文字はスペースなので、これを繰り返してスラッシュを削除する必要がある場合があります。したがって、jQueryの場合は...

var mydate = $('.datetime').html()
var mydateArray = mydate.split(); // This doesn't deal with nested elements, since it's an example.

...バニラ Javascript (javanillascript???) では、次のようになります。

var mydate = document.getElementsByClassName('datetime')
var mydateArray = mydate.split(); // This doesn't deal with nested elements, since it's an example.

日時文字列を使用可能なチャンクに分割したら、それらすべてのチャンクに計算を適用する必要があります。これは、このソリューションの最も複雑な部分です。

ただし、日付を計算して表示用に再フォーマットしたら、HTML に設定するだけです。jQuery の場合:

var myNewDate = convertHijriToStandard(date);
$('.datetime').html(myNewDate);

最大限のブラウザー サポートを探している場合は、jQuery を使用することをお勧めします。日付変換で jQuery を使用しない場合がありますが、古いブラウザーをサポートしている場合は、DOM 要素の処理がはるかに簡単になる場合があります。

幸運を祈ります。これが完全な解決策ではないことは承知していますが、うまくいけば、あなたが始められるはずです. ご不明な点がございましたら、お知らせください。

于 2012-08-25T06:25:20.430 に答える
0

http://www.regular-expressions.info/dates.htmlを見ると、これを実行して 1300 から 1400 までのすべての日付を見つけることができます。

var reg = /^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](13|14)\d\d$/g

あなたができるように

var dates = document.body.innerHTML.match(reg);

しかし、これから変換する方法: http://en.wikipedia.org/wiki/List_of_Islamic_years#Modernタルムード学者に任せます

レジストリは完璧ではありません - 誰かがそれをより良くする必要があるようです. それが機能する場合は、jQuery ( DEMO )でこれを行うことができます

var reg = /(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](13|14)\d\d \d\d:\d\d/g;
$(function() {
  var dates = $("body").text().match(reg);
  console.log(dates);  
  $.each(dates,function(date) {
      console.log(date);
      $("td:contains("+date+")").each(function() {
          $(this).text($(this).text().replace(date,"new date"));
      });
  });
});
于 2012-08-25T07:22:17.313 に答える
0

以下を使用して、特定の要素から始まるすべてのテキスト ノードを再帰します ( mplungjan の単純な正規表現を使用します)。

// Recursively replace text in text nodes of elements
function replaceText(el) {

  var node, nodes = el.childNodes;
  var re = /[0-3]\d\/[01]\d\/\d{4} [012]\d:[012]\d/g;
  var t;

  for (var i=0, iLen=nodes.length; i < iLen; i++) {
    node = nodes[i];

    // Replace content of text nodes
    if (node.nodeType == 3) {
      t = node.data.match(re);

      // See if has a date
      if (t) {

        // Iterate over members of t, replacing Hijri dates with Gregorian dates
        // convertDate should be a function to do the conversion
        for (var j=0, jLen=t.length; j<jLen; j++) {
          node.data = node.data.replace(t[j], convertDate(t[j])); 
        }
      }

    // Recurse over elements to get at child text nodes
    } else if (node.childNodes) {
      replaceText(node);
    }
  }
}

ドキュメント全体を処理する場合は、body 要素に渡します。

于 2012-08-25T08:43:35.340 に答える