作業中のハイライト機能に少し問題があります。私は基本的に、特定の方法で現在のフォームデータと一致するデータベースからレコードをロードします。次に、誰かがフォームに入力しているときに、私のシステムにすでに存在する問題を説明している場合、その説明が既存のレコードと共通している単語を強調表示します。私の問題は、テーブルが壊れることです。ある程度は機能しますが、PHPループ部分がテーブルの残りの部分から外れることがあり、フォーマットがなくなり、強調表示機能が機能しなくなります。具体的には、一度壊れると、テーブル本体のtdタグはヘッダー行のフォーマットに従わなくなります。望ましくない影響を引き起こす条件:
- テキスト領域をタブで移動する
- 一度に削除または適用する必要のあるクラスが多すぎる場合(すべてを削除する、多くの単語を追加する、または出現回数の多い1つの文字を削除または検索する)
メインページのhtml&&ハイライトをトリガーするスクリプト
<textarea name="description" id="description"></textarea>
<script>
var delay = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
$(function(){
$("#description").keydown(function(){
delay((function(){
$("#displayer *").removeClass('highlight');
var1 = $('textarea#description').val().split(' ');
for (var i=0;i<var1.length;i++){
$("#displayer *").highlight(var1[i], "highlight")};
}),1000);
});
});
</script>
ajax呼び出しに基づいて検索されたテーブルを構築する外部phpは次のとおりです。
echo '<TABLE BORDER="0" CELLSPACING="5" CELLPADDING="5" id="displayer"><FONT FACE="ARIAL">';
echo ' <tr> ';
echo ' <td width="20" ALIGN="LEFT" height="1">ID</td>';
echo ' <td width="89" ALIGN="LEFT" height="1">Date</td> ';
echo ' <td width="200" ALIGN="LEFT" height="1" >Description</td>';
echo ' <td width="89" ALIGN="LEFT" height="1" >Solution</td>';
echo ' <td width="20" ALIGN="LEFT" height="1" >User:</td>';
echo ' <td ALIGN="LEFT" height="1" >Key?:</td>';
echo ' <td ALIGN="LEFT" height="1" >Part:</td>';
echo ' <td ALIGN="LEFT" height="1" >Classified As:</td>';
echo ' </tr> ';
for ($i=1; $i <= $num_results; $i++)
{
$row = mysql_fetch_array($result1);
echo '<TR BGCOLOR="#EFEFEF">';
echo '<TD width="20">';
echo stripslashes($row['0']) ;
echo '</TD>';
echo '<TD width="89" >';
echo $row['1'] ;
echo '</TD>';
echo '<TD width="200">';
echo stripslashes($row['6']) ;
echo '</TD>';
echo '<TD width="89">';
echo stripslashes($row['11']) ;
echo '</TD>';
echo '<TD width="20">';
echo $row['5'] ;
echo '</TD>';
echo '<TD>';
if ($row['8'] == 1)
{echo 'Yes' ;}
else
{echo 'No' ;}
echo '</TD>';
echo '<td>'.$row['10'].'</td>';
echo '<td>'.$row['9'].'</td>';
echo '</TR>';
}
echo '</TABLE>';
外部ハイライトプラグイン:
jQuery.fn.highlight = function (str, className) {
var regex = new RegExp(str, "gi");
return this.each(function () {
$(this).contents().filter(function() {
return this.nodeType == 3 && regex.test(this.nodeValue);
}).replaceWith(function() {
return (this.nodeValue || "").replace(regex, function(match) {
return "<span class=\"" + className + "\">" + match + "</span>";
});
});
});
};
最初の条件を解決するために、ある種のエスケープを使用して空のテストを追加する必要があると思いますが、2番目の条件では、何が起こっているのかわかりません。どんな提案でも間違いなくありがたいです。投稿が大きくて複雑で申し訳ありませんが、私が提供できるすべての情報をみんなに持ってもらいたいと思いました。