我不认为自己是专业人士。我决定今年夏天花几个网络语言,让我能够为我的想法做出原型(我是一名设计师)。
为了解决这个问题,我很难搞清楚如何操作我从外部.php脚本回复的元素。基本上我是这样做的。
process_feed.php: - 获取数据,根据数据进行SQL搜索,输出行
while ($row = mysql_fetch_assoc($feedResult))
{
$ctime = date("U",strtotime($row['timestamp']));
echo '<div id="secretmsg">'.$row['secretmsg'].'</br>';
echo '<div id="postedby">Posted By: '.$row['postedby'].'</div>';
echo '<div id="timestamp">'.ago($ctime).'</div><button type ="button" name="'.$row['m_id'].'">Reply</button></div>';
}
主页:
function RefreshFeed()
{
var SchoolName = document.getElementById('schoolname').innerHTML;
$.post('../../process_feed.php', {name: SchoolName}, processResponse);
function processResponse(data) {
$('.secretfeed').html(data);
}
}
也许不是最好的解决方案,但我在一段时间内有RefreshFeed,所以我可以不断获取最新信息。
问题是:我正在努力建立一个评论系统,用户可以在其中回复每个帖子。在我的进程页面上,我添加了一个Reply按钮,其名称设置为数据库中的ID。我正在尝试设置基本功能,其中“回复”按钮将打开文本输入以进行注释,根据ID等将消息发送到数据库等。但是,在我的主页面上,我无法操作元素,因为它是被回应?为了将数据库中的信息回显到我的主页面,然后从我的主页面操纵回显的div,我可以更改什么。
我希望这是有道理的 - 感谢您的帮助:)
答案 0 :(得分:0)
如果我理解正确,那么你想在添加数据后修改DOM - 这样你就可以只使用一个选择器来获得所需的元素并做你想做的事 - 例如:
function processResponse(data) {
// Selector to get all elements by class name within the whole document
$('.secretfeed').html(data);
// Selector to get all buttons by tag name inside $('.secretfeed')
$('.secretfeed').find('button').text('foo');
// Selector to get all buttons by attribute inside $('.secretfeed')
$('.secretfeed').find('[type="button"]').text('bar');
// Selector to get the element with the given id within the whole document
$('#secretmsg').css('color', '#ff0000');
}
备注:强>
HTML元素的ID应始终在整个文档中是唯一的!在您的示例中,您可能使用相同的id回显多个元素(因为它在while循环中) - 使用{{1}而不是。
建议保存选择器,以便jQuery不需要反复解析DOM - 例如:
class=""
但请记住,当你通过例如修改DOM时,选择器不会更新。使用var $myselector = $('.myclass');
$myselector.text('foo');
添加另一个元素 - 然后您需要再次分配变量,以便选择器包含新插入的元素。
此外,当你想要处理它时,确保DOM已经准备好了 - 关于你的回调class="myclass"
这种情况总是如此,因为jQuery会处理它并且在它准备好之前不会执行回调 - 但当你从一个页面重新加载包装你的代码时这样:
processResponse
其他信息:
最后(超出你的问题范围)看一下事件委托,这样你就不需要直接选择所有元素 - 例如如果你想为你的所有按钮添加一个点击处理程序,你不需要为每个按钮注册一个事件处理程序,但可以创建一个全局按钮:
var $myselector = $();
$(document).ready(function(){
$myselector = $('.myclass');
});